这是一个很好的代码(在阅读同事的代码时遇到)

ami*_*cht 5 c++

档案a.hpp:

class a;
typedef boost::shared_ptr<a> aPtr

class a{
public:
    static aPtr CreateImp();
    virtual void Foo() = 0 ;
    ....
};
Run Code Online (Sandbox Code Playgroud)

档案aImp.hpp:

class aImp : public a{

    virtual void Foo();

};
Run Code Online (Sandbox Code Playgroud)

档案aImp.cpp:

aPtr a::CreateImp()
{
     return aPtr(new aImp());
}

void aImp::Foo(){}
Run Code Online (Sandbox Code Playgroud)

客户端必须使用CreateImp获取指针a,而不能使用a其他方式.您对此实施有何看法?您如何看待这种实施?

Nik*_*sov 7

如果是Factory Method设计模式,这看起来像是正常的实现.boost::shared_ptr在内存管理和异常安全方面,使用这个API的程序员的生命更容易回归,并且可以防止调用函数和忽略返回值等简单错误.

编辑:

如果这是基类的唯一实现,则可能是作者的目标是使用pimpl习惯来隐藏实现细节和/或减少编译时依赖性.

  • 伙计们,请说明你的原因,如果你是downvote. (2认同)