c++ 11中unique_ptr的延迟初始化

Lazy initialization of unique_ptr in C++11

本文关键字:延迟 初始化 ptr unique c++      更新时间:2023-10-16

我在c++11 (gcc 4.8.2)中开发c++项目。最近我发现unique_ptr对我很有用。不幸的是,我不能在我的环境中使用std::make_unique函数。所以我尝试用std::move来延迟初始化unique_ptr

实际上,下面的代码工作,我对自己没有信心。你能给出一些更好的方法来初始化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;
 }

你可以更容易地做到

p_data.reset(new AppData(3));

而不是通过创建新变量的额外步骤来移动它。reset将释放被拥有对象的所有权(如果有的话)并释放它,然后获得参数的所有权。

但是make_unique很容易实现

要清楚,它将使您的Test::test函数:

void Test::test() {
    p_data.reset(new AppData(3));
    p_data->print();
}