【发布时间】:2009-02-12 08:42:49
【问题描述】:
我正在研究 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() 被继承,它仍然返回包含指向 Foo 实例的指针的 shared_ptr<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));
【问题讨论】:
标签: c++ inheritance constructor factory named