2017-02-22 7 views
3

私はquestionを参照しています。の配列を以下のようにデフォルトのコンストラクタを削除したクラスに作成できますか?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 to array"を意味するかどうかを明記してください –

答えて

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"); 
関連する問題