使用智能指针作为编程标准吗?
|
我越来越多地听到,尽管我实现了有效的内存泄漏系统,但我应该使用智能指针而不是裸指针。
请问使用智能指针的正确编程方法是什么?即使我检查分配的内存块上的内存泄漏,也应该真正使用它们吗?还取决于我吗?如果我不使用它们,可以认为这是编程上的弱点吗?
如果强烈建议使用智能指针(例如std :: auto_ptr),我应该使用它们而不是每个裸指针吗?
没有找到相关结果
已邀请:
9 个回复
畦桨存灯
。有具有不同所有权语义的不同智能指针。使用适合您需求的那一种。 (主要的是
,
,
和
/
(如果可用,最好选择后者)。根据编译器的不同,它们可能在标准库中作为TR1的一部分提供,或者根本不提供,在这种情况下,您可以可以通过Boost库获取它们。 是的,您绝对应该使用这些。它不会花费您任何钱(如果做得正确,您将失去零性能),并且会收获很多(内存和其他资源会自动释放,您不必记住手动处理它,而使用该资源的代码变得更短,更简洁) 请注意,并非每种指针用法都代表某种资源所有权,因此并非所有原始指针用法都是错误的。如果您只需要指向别人拥有的对象,则原始指针非常适合。但是,如果您拥有该对象,则应该通过赋予类本身的RAII语义或将其包装在智能指针中来获得对它的适当所有权。
骨酚柯
授巨
捅瓶啡
,因为它已经过时了!!您可以根据需要使用其他各种智能指针。您可以参考上面的链接以了解有关它们的更多信息。
雄鞋谋塘
,因为它将是连接 断开连接事件。 (持有指向此类对象的指针的对象 将必须向其注册,以便被告知 破坏。但是,此类指针仅用于导航,不应 成为聪明的指针。) 人们在尝试使用智能指针时通常会找到的内容 到处都是内存泄漏;典型的参考计数器不 处理周期,当然,典型的应用程序充满周期:
将指向与其相连的
,并且
将包含连接的
列表。 如果智能指针是
, 指针悬空的风险:创建两个指针远非易事
到相同的地址(这导致两个计数器 供参考)。
戊袱
将使您的类不可复制。如果您不希望这样做,请参阅下一点。 使用ѭ14表示容器或启用共享所有权:
(C ++ 03)可用于所有权转让。例如,作为工厂或克隆方法的返回值:
如果需要存储您不拥有的指针,则可以使用原始指针:
在某些情况下,需要ѭ30。请参阅文档以获取更多信息。
旅牢斯讲
版本,则使用智能指针几乎变得不可能。 智能指针用于控制对象的生存期。通常,当您传递指向函数的指针时,该函数不会影响生存期;该函数不尝试删除该对象,并且不存储指针的副本。在函数返回之前,调用代码无法删除对象。在那种情况下,完全可以接受一个哑指针。
桔马牛
或
(视情况而定)将
的所有原始指针包装起来。在
的帮助下,
表现出色。如果您不需要参考计数,
将为您带来更好的性能。它们在集合和其他以“ 4”为哑指针的情况下均能正常工作。
联课