我正在研究 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 子类化时,上面的内容就中断了,因为即使 thoinit()
是继承的,它仍然返回shared_ptr<Foo>
包含指向实例的指针Foo
。
谁能想到一个优雅的解决方案?我是否应该坚持使用(半)手动包装类的实例shared_ptr
?这也可以在不声明新的命名构造函数的情况下公开参数化构造函数......
IE。
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));