在C ++ 11中对unique_ptr进行延迟初始化

时间:2015-06-05 04:55:50

标签: c++ c++11 smart-pointers unique-ptr

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

实际上,下面的代码有效,我对自己没有信心。您能否就更好地初始化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;
 }

1 个答案:

答案 0 :(得分:4)

你可以更轻松地做到

p_data.reset(new AppData(3));

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

make_unique is very easy to implement

要清楚,它会使您的Test::test功能:

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