【发布时间】:2010-10-13 19:07:45
【问题描述】:
为什么在 C++ 中,对于对象 A、B
//interface, case #1
class A {
B bb;
}
A::A()
{ //constructor
bb = B();
}
//interface, case #2
class A {
B *bb;
}
A::A()
{ //constructor
bb = new B();
}
为什么案例 #2 有效但 #1 无效?
编辑:我现在明白了。但是对于案例 #1,如果 A 的一个实例被释放,它的 bb 是否也会自动被释放?案例 #2 你必须显式调用 bb = NULL 对吗?
【问题讨论】:
-
哪方面不行?
-
发布真实代码,而不是伪代码。
-
bb = NULL 是不够的。 C++ 不是垃圾收集器。你需要调用 delete bb - 否则你是正确的:当你有 bb 作为成员时,它将与 A 一起自动释放,并且它的析构函数也会被自动调用。
-
A 不是对象。这是一堂课。关于你的问题,我建议阅读一本基本的 C++ 书籍。你真的需要从一个可靠的来源了解到,在 C++ 中设置一个指向 NULL 的指针对它所指向的内存没有任何作用。