【发布时间】:2010-09-23 14:15:54
【问题描述】:
使用pImpl idiom 时,最好使用boost:shared_ptr 而不是std::auto_ptr?我确定我曾经读过 boost 版本对异常更友好?
class Foo
{
public:
Foo();
private:
struct impl;
std::auto_ptr<impl> impl_;
};
class Foo
{
public:
Foo();
private:
struct impl;
boost::shared_ptr<impl> impl_;
};
[编辑] 使用 std::auto_ptr 是否总是安全的,或者是否存在需要替代 boost 智能指针的情况?
【问题讨论】:
-
有些事情让我很困扰:你愿意使用 pimpl idiom,一个编译器防火墙。所以你试图限制编译时依赖。但是,您很高兴注入智能指针实现(
scoped_ptr、shared_ptr、auto_ptr或其他),而您的“shell”类仅将调用转发到实现类并删除其析构函数中的指针。不知何故,我觉得如果 shell 类做更多的事情,那么设计可能会被破坏。 -
我相信这值得对新的 C++ 进行更新。 Herb Sutter 最近在blogged 谈论这个。
标签: c++ boost stl shared-ptr auto-ptr