分配给std :: shared_ptr成员变量

P45*_*ent 12 c++ c++11

我有一个类foo,其成员bar类型std::shared_ptr<int>:

class foo
{
    std::shared_ptr<int> bar;
    /*other stuff here*/
};
Run Code Online (Sandbox Code Playgroud)

在I类要分配new intbar.但我不能写,bar = new int();因为指针没有公共赋值运算符.

如何应该我做这个?我可以std::move或者std::swap但这些都不对.

Bat*_*eba 14

bar = std::make_shared<int>(); 是一种方式,特别是如果你想保留赋值运算符的易处理性.

  • `std :: make_shared <int>(new int())`无效; `make_shared`完美地转发`T`构造函数的参数.它被指定使用`:: new(pv)T(std :: forward <Args>(args)...)`构造对象,所以如果没有args,它将被初始化. (2认同)

Tar*_*ama 11

你可以使用reset这个:

bar.reset(new int());
Run Code Online (Sandbox Code Playgroud)

这将delete是当前内容(如果有)并将内部指针设置为new表达式返回的内容.