use*_*112 2 c++ shared-ptr c++11
我有一节课:
class C{
public:
//Omitted
private:
shared_ptr<X> anArray[2];
};
Run Code Online (Sandbox Code Playgroud)
和X看起来像:
class X{
public:
X(); //default constructor used by the above array declaration?
private:
std::unordered_map<int, double> a;
};
Run Code Online (Sandbox Code Playgroud)
创建我的C类后,我访问数组中的两个shared_ptr对象之一,但是,内存似乎没有初始化.我的意思X::a是没有任何有效的状态.
我认为数组声明C会创建shared_ptr<X>s AND X对象吗?
我应该在X默认构造函数中明确地做些什么吗?
std::shared_ptr<X>绝对的默认构造函数不会创建新的实例X.它这样做是为了允许创建一个"空指针",智能指针相当于NULL,因此默认构造的智能指针类似于"默认构造的"原始指针.
要获得所需内容,只需anArray在构造函数的初始化列表中初始化实例,如下所示:
class C: {
public:
C() : anArray({std::shared_ptr<X>(new X()), std::shared_ptr<X>(new X())}) // ...
{
// rest of constructor
}
private:
std::shared_ptr<X> anArray[2];
};
Run Code Online (Sandbox Code Playgroud)
或者,您可以std::make_shared<X>()在初始化列表中使用,而不是std::shared_ptr<X>(new X())因为它导致内存泄漏的异常更高效,更安全.我留下了"原始"形式,因此更清楚地了解发生了什么.