5

重複の可能性:
::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(){}

};

何か案は?

4

1 に答える 1

2

make_shared を呼び出す代わりに、自分でポインターを割り当てるだけです。

static std::shared_ptr<Foo> getSharedPointer()
{
    return std::shared_ptr<Foo>(new Foo);
}

ただし、これにはデストラクタを public にする必要があることに注意してください。

于 2012-10-16T18:01:06.470 に答える