Pat*_*ick 1 c++ visual-studio-2010 shared-ptr c++11
我正忙着设计一个新的C++应用程序.在这个应用程序中,我想用指针最小化潜在的错误,并且由于应用程序应该是普通的C++(没有.Net或其他奇特的东西),我正在调查共享指针,我正在考虑在任何地方使用共享指针(而不是普通的指针).
我制定了一些技巧,以便更容易使用共享指针,例如:在类中使用typedef,如下所示:
class X
{
public:
...
typedef std::shared_ptr<X> Ptr;
};
Run Code Online (Sandbox Code Playgroud)
这样你就可以轻松编写X :: Ptr,它比"std :: shared_ptr"更容易编写.
我还注意到共享指针的一些缺点:
<memory>还有其他技巧可以让共享指针更容易使用吗?
别!
最小化指针错误的唯一方法是使用正确的指针类型.这是类型,复数.
共享指针不是灵丹妙药.当你有周期性参考时,它们会立即变成内存泄漏(如果计划在任何地方使用它们,那些会很快出现)
如果你想要没有错误的C++应用程序,你必须为它工作.你必须了解你的申请.您必须了解不同对象的所有权语义.共享指针只为您提供共享所有权,这通常是一个不错的最低分母.其他所有东西都可以被共享所有权取代,它会起作用.
但是默认情况下是一个对象是由拥有一个其他实体.它由函数拥有,并且应该在该函数返回时被销毁,或者它由类或其他任何东西拥有.通常,你根本不需要指针.std::vector或许,对象按值存储在a中.或者它只是一个局部变量或类成员.如果它是一个指针,它通常会更好地由一个scoped_ptr允许所有权转移(unique_ptr或auto_ptr)的一个或多个表示.
shared_ptr当你无法保证对象的生命周期或所有权时,你可能会回到这一点.但是当你使用它时,你还需要weak_ptr用来打破周期.
实际上,更好的方法是尽可能避免指针.当你这样做需要一个指针,使用一个具有最具体的所有权语义的可能(喜欢scoped_ptr,不允许过户的话,那么如果你需要它,回落到一个允许您移动所有权,如unique_ptr,并且只作为最后的手段,您可以使用shared_ptr,这允许您在任意数量的客户之间自由分享所有权.
没有魔杖可以让你的C++代码"正常工作".实现这一目标的唯一方法是编写良好的可靠C++代码.你可以通过了解和使用你可以使用的工具来做到这一点,而不是假装"嘿,shared_ptr就像垃圾收集器一样,不是吗?我可以忽略对象生命周期或内存泄漏的所有问题,如果我使用的话它".
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |