C++ 方法本地结构是否需要执行默认构造函数
在类方法中声明一个C++ 方法本地结构是否需要执行默认构造函数,c++,methods,struct,memory-management,C++,Methods,Struct,Memory Management,在类方法中声明一个struct时,如何分配该struct的内存?例如: void Foo::Bar(void) { struct timeval a; a.tv_sec = 1; a.tv_usec = 0; ... } 是像任何其他本地数据一样在堆栈上分配内存(int、double,等等),还是调用默认构造函数并在堆上分配内存 如果struct初始化为:struct timeval a={0,0} 尝试决定是将结构作为类成员还是将其作为本地方法更好,因为该
struct
时,如何分配该struct
的内存?例如:
void Foo::Bar(void)
{
struct timeval a;
a.tv_sec = 1;
a.tv_usec = 0;
...
}
是像任何其他本地数据一样在堆栈上分配内存(int
、double
,等等),还是调用默认构造函数并在堆上分配内存
如果struct
初始化为:struct timeval a={0,0}代码>
尝试决定是将结构作为类成员还是将其作为本地方法更好,因为该方法经常被调用,并且需要尽可能快
是像任何其他本地数据(int、double等)一样在堆栈上分配内存,还是调用默认构造函数并在堆上分配内存
它在本地存储(堆栈)上分配。
只有在创建对象时使用任何new
版本的运算符(可能不包括placement new)时,才会在Freestore(堆)上创建对象。
此外,您的结构对象不会持续存在于包含它的函数的范围之外。Freestore(Heap)对象将一直存在,直到您显式地对其调用delete为止
无论何时创建结构/类的对象,都会为该结构/类调用适当的构造函数(通过匹配参数类型)。在本例中,创建对象时不传递任何参数,因此将调用默认构造函数
如果结构初始化为:struct timeval a={0,0}
它仍然被分配为具有本地存储的对象
尝试决定是将结构作为类成员还是将其作为本地方法更好,因为该方法经常被调用,并且需要尽可能快
在本地存储(堆栈)上创建对象比在Freestore(堆)上创建对象快。
不过,在您的情况下,根本不使用堆
对示例代码的实际分析将告诉您哪一个(本地结构或类成员)更适合您的性能要求
<>但是,请考虑该结构是如何与您的类相关的,然后才成为它的成员。它是否与类有关系,或者它只是一个实用结构。你也应该考虑设计方面的问题。
此外,在本地结构或类中可以访问的内容中也有,因此请记住这一点。在您的示例中,对象在堆栈上分配,并调用默认构造函数。默认构造函数可能很小,因此它会得到完全优化。对象是一个实用结构,这就是为什么我想让它成为一个本地的。没有一个具有关系。不幸的是,这是针对嵌入式平台的,无论出于何种目的,分析工具都不可用,因此我无法在我的目标上通过分析程序运行此功能。@LordOphidian:这样就可以将其作为本地结构。