我有一个名为foo的类,拥有一个类型为std::shared_ptr<int>的成员bar: class foo { std::shared_ptr<int> bar; /*other stuff here*/ }; 在那个课堂上,我想要为bar分配一个new int。但是我不能写bar = new int();,因为指针没有公共赋值运算符。 我该如何做呢?我可以使用std::move或std::swap,但这两种方法都似乎不太对。
int
еҲқе§ӢеҢ–дёә0пјҹnew int()
дјҡпјҢnew int
дёҚдјҡгҖӮ - Bathshebastd::make_shared<int>(new int())
不是有效的;make_shared
完美转发参数到T
构造函数。它被指定使用::new (pv) T(std::forward<Args>(args)...)
构造对象,所以如果没有参数,它将被值初始化。 - TartanLlamamake_*
函数没有任何“未初始化”的形式。我记得曾经有一次提出了这样的建议(作为允许为make_{shared,unique}
使用大小数组类型的提议的一部分),并且该提议还附带了一个使用默认初始化的make_*_uninitialized
形式。一般来说,标准库很难产生未初始化的值,尽管有时这正是你需要的... - Kerrek SB