在一个编程作业中,我们被给定一个模板类,其中声明了两个成员不是指针,而是实际的对象:
Foo member;
在构造函数中,我最初尝试使用
member = *(new Foo());
,但是发现它有时会复制新的Foo对象,从而导致内存泄漏。最终我找到了
member = Foo()
,然后查阅了它们之间的区别。我了解到成员将分配在堆栈上,而不是堆上,并且一旦超出范围,它将被删除。但对于对象来说,这是如何工作的呢?成员只有在父类/对象被删除时才会被删除吗?
我还有另一个关于
member = *(new Foo());
的问题。我正在初始化两个相同类型的成员变量:// Members
Foo member1;
Foo member2;
// Constructor {
member1 = *(new Foo());
member2 = *(new Foo());
}
由于某些原因,似乎member1
没有被复制,它保留了与初始Foo
相同的地址(即在删除时没有内存泄漏)。然而,member2
会被复制并具有不同的地址,导致内存泄漏。这是为什么呢?
class
对象,并且需要大量依赖于structs
,但我们在讨论C++。我认为C++/Java中对象创建的核心基础是相同的,我不确定你所说的生命周期是“确定性”的含义。不过,我认为你在评论中所说的一个是以值为中心,另一个是以引用为中心,已经准确地表达了需要说的内容。 - undefined