私は C++ フレームワークに取り組んでおり、多数のコア クラスに自動メモリ管理を適用したいと考えています。これまでのところ、私は標準的なアプローチを持っています
class Foo
{
public:
static
shared_ptr<Foo> init()
{
return shared_ptr<Foo>(new Foo);
}
~Foo()
{
}
protected:
Foo()
{
}
};
// Example of use
shared_ptr<Foo> f = Foo::init();
ただし、 Foo をサブクラス化すると、上記は壊れます。init()
継承shared_ptr<Foo>
されているため、のインスタンスへのポインターを含むものが返されますFoo
。
これに対するエレガントな解決策を考えられる人はいますか? おそらく、クラスのインスタンスを(半)手動でラップすることに固執する必要がありshared_ptr
ますか?これにより、新しい名前付きコンストラクターを宣言せずに、パラメーター化されたコンストラクターを公開することもできます...
すなわち。
template <typename T>
shared_ptr<T> make_shared(T* ptr)
{
return shared_ptr<T>(ptr)
}
// Example
shared_ptr<T>
f1 = make_shared(new Foo()),
f2 = make_shared(new Foo(1,2));