【发布时间】:2010-07-07 17:50:42
【问题描述】:
我有一个看起来像这样的类:
class Foo
{
public:
Foo();
virtual ~Foo();
private:
Odp* bar;
};
我希望将bar 初始化为NULL。这是最好的方法吗?
Foo::Foo() : bar(NULL)
{
}
另外,析构函数是否必须是虚拟的? (如果这是真的,那么构造函数也必须是虚拟的吗?)
【问题讨论】:
-
可以说更好的是
Foo::Foo() : bar() {}(注意,不是NULL。)不过最好不要有指针。 -
为什么这样更好?
NULL是隐含的吗? -
“为什么这样更好?”您不需要为
NULL的定义包含一个头文件(反正就是0)。 “NULL是隐含的吗?”是的。bar()是一个值初始化;在指针的情况下,它将其初始化为 null。 -
实际情况稍微少一些,你只需要它是虚拟的,如果: - 有人从你的类继承 - 其他人使用指向你的类的指针来删除该对象即使这样它也只会导致问题,如果该派生类有一个重要的析构函数。因为最后一个很难确定,一般的想法是如果有人从你那里派生出来,你应该使用虚拟析构函数。在这种情况下,派生是 Java 的“扩展”,而不是“实现”。
标签: c++ oop initialization-list