![](/img/trans.png)
[英]In C++, What should I do when I want to initialize class members via constructor when I initialize a class object array?
[英]C++: Should I initialize pointer members that are assigned to in the constructor body to NULL?
假设我有:
// MyClass.h
class MyClass
{
public:
MyClass();
private:
Something *something_;
}
// MyClass.cpp
MyClass::MyClass()
{
something_ = new Something();
}
我应该在MyClass构造函数的构造函数初始化列表中初始化something_到NULL(或0)吗? 或者这是不必要的,因为我在构造函数的主体中分配它? 建议的做法是什么?
通常,您只在初始化列表或正文中分配一次,除非正文初始化可能发生或可能不发生,或者具有先决条件代码:
MyClass::MyClass()
{
//this code must happen first
// _now_ max is known
something_ = new Something(max);
}
MyClass::MyClass()
{
if (max)
something_ = new Something(max);
else
something_ = NULL;
}
MyClass::MyClass()
: something_(new Something())
//as pointed out in the comments, use smart pointers
{
}
一般来说 - 没有。 但是,如果构造函数指针中的某个位置在初始化之前使用,那么您将获得未定义的行为。 但是,您遇到的最大问题是 - 如果在构造函数中抛出异常,则不会调用其析构函数。 因此,假设您有两个指向对象的指针,并且第二个分配失败时第一个对象的分配成功,在这种情况下,您最终会出现资源泄漏。 这可以通过使用“智能”指针来解决。 但在这种情况下,它们将在初始化列表中初始化,如果您不想为它们分配值两次,那么您最好在那里而不是在构造函数体中分配内存。
没有必要,特别是如果你在构造函数体中立即初始化,但是如果初始化不那么明显那么为什么不使用NULL来避免意外访问未初始化的变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.