Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 方法本地结构是否需要执行默认构造函数_C++_Methods_Struct_Memory Management - Fatal编程技术网

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:这样就可以将其作为本地结构。