我有兩個std::unique_ptr
成員的課。我想通過構造函數設置這些成員。有沒有辦法用unique_ptr減少詳細實例化?
目前我在做這個:
std::unique_ptr<Assignment> assignment{new Assignment{
std::unique_ptr<Variable>{new Variable{"a"}},
std::unique_ptr<Expression>{new Variable{"b"}}
}};
通過定期的三分球,我只是這樣做:
auto assignment = new Assignment{new Variable{"a"}, new Variable{"b"}};
delete assignment;
我可以讓智能指針版本更簡潔不知何故?我希望像這樣的東西可能工作。
std::unique_ptr<Assignment> assignment{new Variable{"a"},{new Variable{"b"}};
但是,unique_ptr
的構造函數是顯式的,所以它沒有。
你可以提供你自己的['std :: make_unique']實現(http://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)來使一些事情變得容易一些。 –
如果你正在尋找一種實現'make_unique()'的方法,我會建議:http://stackoverflow.com/questions/7038357/make-unique-and-perfect-forwarding。另外,請注意,在第二個和第三個示例中,如果構建第二個「新變量」失敗,則會泄漏內存。 (這是std :: make_unique和std :: make_shared全部的一部分)。 –
@sharth:第一個例子中的情況也是如此。我不確定,但我相信編譯器可以交錯創建兩個'unique_ptr'參數,首先執行兩個'new',然後構造'unique_ptr',可能會泄漏內存。您需要交錯函數調用('make_unique')以確保沒有內存泄漏。 –