![](/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.