sha*_*oth 19
智能指针对图形结构中的循环没有帮助.
例如,对象A保存一个指向对象B和对象B的智能指针 - 返回到对象A.如果在断开A与B(或B与A断开)之前释放所有指向A和B的指针,则A和B将互相保持并形成一个快乐的记忆泄漏.
垃圾收集可以帮助解决这个问题 - 它可以看到两个对象都无法访问并释放它们.
Mir*_*toš 10
我想提一下性能限制.智能指针通常使用原子操作(例如Win32 API中的InterlockedIncrement)进行引用计数.这些函数明显慢于普通整数运算.
在大多数情况下,这种性能损失不是问题,只需确保不要制作太多不必要的智能指针对象副本(更喜欢在函数调用中通过引用传递智能指针).
注意转换 - 在原始指针和智能指针之间进行分配时.糟糕的智能指针 - 比如_com_ptr_t- 通过允许隐式转换使情况变得更糟.大多数错误发生在转换过程中.
注意周期 - 如上所述,你需要弱指针来打破周期.但是,在一个复杂的图表中并不总是那么容易.
选择太多 - 大多数库提供不同的实现,具有不同的优点/缺点.不幸的是,大多数时候这些不同的变体是不兼容的,这在混合库时变成了探测器.(比如,LibA使用LOKI,LibB使用boost).必须提前计划enable_shared_from_this糟透了,必须决定之间的命名约定intrusive_ptr,shared_ptr以及weak_ptr一堆对象很糟糕.
对我来说,shared_ptr(或类似功能之一)的最大优势在于它在创建时与其销毁策略相关联.C++和Win32都提供了很多方法来摆脱它甚至都不好笑的东西.在构造时耦合(不影响指针的实际类型)意味着我在一个地方有两个策略.
| 归档时间: |
|
| 查看次数: |
9781 次 |
| 最近记录: |