Nic*_*ner 32 c++ oop initialization-list
我有一个类看起来像:
class Foo
{
public:
Foo();
virtual ~Foo();
private:
Odp* bar;
};
Run Code Online (Sandbox Code Playgroud)
我希望初始化bar
为NULL
.这是最好的方法吗?
Foo::Foo() : bar(NULL)
{
}
Run Code Online (Sandbox Code Playgroud)
此外,析构函数是否必须是虚拟的?(如果这是真的,那么构造函数也必须是虚拟的吗?)
gre*_*ade 40
我希望初始化
bar
为NULL
.这是最好的方法吗?
这是正确的方法.所以,是的.
此外,析构函数是否必须是虚拟的?
不会.如果你要从Foo
类继承并且将使用Foo
指针来删除那些派生类,析构函数只需要是虚拟的(虽然作为一般经验法则,如果有任何其他虚拟成员,它应该是虚拟的).
(如果这是真的,那么构造函数也必须是虚拟的吗?)
号构造函数既不需要是virtual
,也可以他们.
Tyl*_*nry 10
是的,初始化列表是最好的.
也许.如果您打算在类中拥有任何其他虚函数,或者您打算继承该类(尽管通常这些事情在一起),则析构函数应该是虚拟的.
不可以.在C++中使用虚拟构造函数是不可能的.(这样的事情甚至意味着什么?)
你的问题的本质告诉我,你并不真正理解virtual
关键字的作用或用途是什么,而你只是复制了别处或教程中看到的内容.最好了解您正在编写的所有代码的用途.这里可能是一个开始的地方:http://www.parashift.com/c++-faq-lite/virtual-functions.html
Joh*_*itb 10
存在四种不同的方式.哪一个是最好的取决于你
Foo::Foo() : bar() // value initialization
{
}
Foo::Foo() : bar(0) // direct null pointer constant
{
}
Foo::Foo() : bar(NULL) // null pointer constant by macro
{
}
Foo::Foo() : bar(nullptr) // pointer literal of type std::nullptr_t
{
}
Run Code Online (Sandbox Code Playgroud)