重複の可能性:
::std::make_shared をプロテクト コンストラクターまたはプライベート コンストラクターのみを持つクラスで呼び出すにはどうすればよいですか?
クラスへの共有ポインタを作成し、コンストラクタ\デストラクタを保護しながらそれを返すファクトリ メソッドを作成したいと考えています。共有ポインタはコンストラクタまたはデストラクタにアクセスできないため、コンパイラ エラーが発生します。
私はllvm 4.1を使用していますが、コンパイラに依存しないソリューションを探しています(コンストラクタ\デストラクタを公開する以外に)。
これはコードサンプルです:
class Foo
{
public:
static std::shared_ptr<Foo> getSharedPointer()
{
return std::make_shared<Foo>();
}
protected:
Foo(int x){}
~Foo(){}
};
何か案は?