簡體   English   中英

C ++ 11中的unique_ptr的延遲初始化

[英]Lazy initialization of unique_ptr in C++11

我正在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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM