jef*_*jef 2 c++ smart-pointers unique-ptr c++11
我正在c ++ 11(gcc 4.8.2)中开发c ++项目。最近我发现unique_ptr对我有用。不幸的是,我无法std::make_unique在我的环境中使用该功能。所以,我想的延迟初始化unique_ptr使用std::move。
实际上,以下代码有效,我对自己没有信心。您能对初始化a的更好方法提供任何意见unique_ptr吗?我认为我的初始化有点多余。
class AppData {
public:
AppData(int id):_id(id){};
int _id;
void print() { std::cout << "id is " << _id << std::endl; };
};
class Test {
public:
Test(){};
~Test(){};
void test();
std::unique_ptr<AppData> p_data;
};
void Test::test() {
// I am concerned with this part
std::unique_ptr<AppData> p(new AppData(3));
p_data = std::move(p);
p_data->print();
}
int main() {
Test t;
t.test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您可以更轻松地做
p_data.reset(new AppData(3));
Run Code Online (Sandbox Code Playgroud)
而不是为了创建新变量而执行额外的步骤。 reset将释放拥有的对象(如果有)的所有权并释放它,然后获取参数的所有权。
但是make_unique 很容易实现
要清楚,它将使您的Test::test功能:
void Test::test() {
p_data.reset(new AppData(3));
p_data->print();
}
Run Code Online (Sandbox Code Playgroud)