如何在只有受保護或私有構(gòu)造函數(shù)的類上調(diào)用:std:make_Shared?我的代碼不起作用,但我認為其意圖是明確的:testmakeshared.cpp#include <memory>class A {
public:
static ::std::shared_ptr<A> create() {
return ::std::make_shared<A>();
}
protected:
A() {}
A(const A &) = delete;
const A &operator =(const A &) = delete;};::std::shared_ptr<A> foo(){
return A::create();}但是,當(dāng)我編譯它時,我會得到這個錯誤:g++ -std=c++0x -march=native -mtune=native -O3 -Wall testmakeshared.cppIn file included from /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../i
nclude/c++/4.6.1/bits/shared_ptr.h:52:0,
from /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/memory:86,++/4.6.1/bits/shared_ptr_base.h:
400:2: error: within this contextCompilation exited abnormally with code 1 at Tue Nov 15 07:32:58這條消息基本上是說,模板實例化堆棧中的一些隨機方法從::std::make_shared無法訪問構(gòu)造函數(shù),因為它是受保護的。但我真的想用這兩種方法::std::make_shared并防止任何人創(chuàng)建這個類的對象,而該對象不是::std::shared_ptr..有辦法做到這一點嗎?
3 回答

寶慕林4294392
TA貢獻2021條經(jīng)驗 獲得超8個贊
std::make_shared
要求:
表達 ::new (pv) T(std::forward<Args>(args)...)
,在哪里 pv
有型 void*
并指向適合保存類型對象的存儲。 T
,應(yīng)形成良好的結(jié)構(gòu)。 A
應(yīng)為分配器(17.6.3.5)。的復(fù)制構(gòu)造函數(shù)和析構(gòu)函數(shù)。 A
不得拋出異常。
A
A
// interface in headerstd::shared_ptr<A> make_a();// implementation in sourcenamespace {struct concrete_A: public A {};} // namespacestd::shared_ptr<A>make_a(){ return std::make_shared<concrete_A>();}
- 3 回答
- 0 關(guān)注
- 1388 瀏覽
添加回答
舉報
0/150
提交
取消