所以,我希望使用智能指针而不是裸指针,几乎所有与此相关的主题都提到了Boost库。但std有诸如std::auto_ptr
和std::shared_ptr
之类的东西。
为什么要使用Boost?它们有什么区别吗?
这不是关于实现差异的问题,而是关于使用Boost指针的原因。我认为,答案包括回答日期和上下文,是相当有用的。它有助于理解如何将Boost指针添加到std中。
基本上,Boost先引入了shared_ptr
。你可能会注意到,在C++11中的许多新容器类在很久以前就出现在Boost中了。我预计这种模式也将延续到C++标准的下一次修订中。Boost支持旧的C++编译器,这些编译器不支持C++11,这是一个重大的优势。
顺便说一下,std::auto_ptr
已经在C++11中被废弃,取而代之的是std::shared_ptr
和std::unique_ptr
,它们都更加实用。
std::shared_ptr
和boost:shared_ptr
都是引用计数指针。相比之下,std::auto_ptr
的工作方式完全不同。 std::shared_ptr
和boost:shared_ptr
之间的区别非常小,主要是历史原因。在C++11之前,没有std::shared_ptr
,只有boost:shared_ptr
。当设计C++11时,他们以boost:shared_ptr
为模型。auto_ptr
的工作方式是,如果您拥有多个auto_ptr
实例,则只有其中一个包含对实际对象的指针。每当您从另一个auto_ptr
创建auto_ptr
时,新的auto_ptr
将指向该对象,而旧的auto_ptr
将指向NULL
。另一方面,对于shared_ptr
,可以有多个shared_ptr
实例共享同一个对象,只有最后一个实例超出范围时,才会删除该对象。std::auto_ptr
的指针类型,即std::unique_ptr
,但有一些重要的区别,请参见std::auto_ptr to std::unique_ptr。
std::shared_ptr
等(除了std::auto_ptr
)是模仿Boost中同名结构而设计的。 - Some programmer dudeboost
智能指针,例如boost::shared_ptr
,仅在去年成为标准(因此成为std::shared_ptr
)。 - Gorpik