Use*_*ser 6 c++ initializer shared-ptr make-shared c++11
初始化shared_ptr成员变量时:
// .h
class Customer
{
public:
Customer();
private:
std::shared_ptr<OtherClass> something_;
}
// .cpp
Customer():
something_(new OtherClass())
{
}
Run Code Online (Sandbox Code Playgroud)
与
Customer():
something_(std::make_shared<OtherClass>())
{
}
Run Code Online (Sandbox Code Playgroud)
是否允许使用make_shared版本?我似乎总是看到第一个版本,这是首选?
Nic*_*las 13
当唯一的时间make_shared是不容许有:
shared_ptr.在与C API连接时经常会出现这种情况.如果要调用的构造函数不是公共的(make_shared只能调用公共构造函数).这可能发生在工厂函数中,您希望强制用户从工厂创建对象.
但是,有办法解决这个问题.没有私有构造函数,而是拥有一个公共构造函数.但是,使构造函数采用只能由具有私有访问权限的类构造的类型.这样,唯一可以make_shared使用该对象类型调用的人是具有私有访问权限的人.
所以,是的,你可以做到这一点.