小编Joe*_*oey的帖子

C++:实例化类成员时使用 new 关键字与不使用 new 关键字之间的区别?

对于编程作业,我们得到一个模板类,其中两个成员不是声明为指针,而是声明为实际对象:

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然而,将被复制并具有不同的地址,并且内存被泄漏。对此有解释吗?

c++ memory-leaks memory-management new-operator

3
推荐指数
1
解决办法
1559
查看次数