对于编程作业,我们得到一个模板类,其中两个成员不是声明为指针,而是声明为实际对象:
Foo member;
Run Code Online (Sandbox Code Playgroud)
在构造函数中,我member = *(new Foo());最初尝试过,但了解到,至少有时,它正在复制新的 Foo 对象,因此导致内存泄漏。
我终于发现了member = Foo(),然后查了一下有什么区别。我了解到成员将在堆栈而不是堆上分配,并且一旦超出范围就会被删除。那么这对于对象来说是如何工作的呢?
成员是否仅在父/类对象被删除时才被删除?
我还有一个关于 的问题member = *(new Foo());。我正在初始化两个相同类型的成员变量:
// Members
Foo member1;
Foo member2;
// Constructor {
member1 = *(new Foo());
member2 = *(new Foo());
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,它似乎member1没有被复制,并且保留了与初始地址相同的地址Foo(即删除时没有内存泄漏)。member2然而,将被复制并具有不同的地址,并且内存被泄漏。对此有解释吗?