我有一個類foo
,與std::shared_ptr<int>
類型的成員bar
:分配到一個std :: shared_ptr的成員變量
class foo
{
std::shared_ptr<int> bar;
/*other stuff here*/
};
那堂課我要分配給new int
bar
。但是我不能寫bar = new int();
,因爲指針沒有公共賦值操作符。
如何應該我這樣做?我可以std::move
或std::swap
,但這些都不對。
看到您的編輯。這種改變是否還會將'int'初始化爲0? 'new int()'會,'new int'不會。 – Bathsheba
'std :: make_shared(new int())'無效; 'make_shared'完美地將參數傳遞給'T'構造函數。它指定使用':: new(pv)T(std :: forward (args)...)'構造對象,所以如果沒有參數,它將被初始化。 –
TartanLlama
@Bathsheba:沒錯,沒有「未初始化」的任何'make_ *'函數形式。我認爲這樣的提議曾經提出過一次(作爲允許make_ {shared,unique}的大小數組類型的提議的一部分),並且提案帶有一個使用默認初始化的make _ * _ uninitialized形式。一般來說,標準庫使得產生未初始化的值非常困難,即使有時候這就是你所需要的... –