2017-02-22 59 views
3

我指的是question,我們可以創建一個std::unique_ptr數組到一個已經刪除默認構造函數的類如下,如何傳遞string參數。創建一個智能指針數組,沒有默認的構造函數

#include <iostream> 
#include <string> 
#include <memory> 

using namespace std; 

class A 
{ 
    string str; 
public: 
    A() = delete; 
    A(string _str): str(_str) {} 
    string getStr() 
    { 
     return str; 
    } 
}; 

int main() 
{ 
    unique_ptr<A[]> ptr = make_unique<A[]>(3); 
    unique_ptr<A[]> arr[3] = make_unique<A[]>(3); 
    // Do something here 
    return 0; 
} 
+2

你問*的'的std :: unique_ptr' *陣列,但是你有*'的std :: unique_ptr'到一個數組*。 – Zereges

+0

請澄清你的代碼中是否有「unique_ptr到數組」,或者「智能指針數組」 –

回答

1

你不能這樣做,make_unique。但你可以使用這個:

unique_ptr<A[]> ptr(new A[3]{{"A"}, {"B"}, {"C"}}); 

在C++ 11之前 - 這是非常困難的(這可以通過安置新的等)。

+0

你可以更具體地說明爲什麼我們不能用'std :: make_unique'來做到這一點,或者一些引用會有幫助。 – Panch

+1

@Panch只是因爲數組的make_unique只有一個方法(那個接收大小的方法)。 – ForEveR

4

對於智能指針數組:

unique_ptr<A> ptr[3]; 

for (auto& p : ptr) 
    p = make_unique<A>("hello"); 
相關問題