【发布时间】:2013-12-17 09:23:03
【问题描述】:
我有 C# 和 obj-c 的背景,所以 RC/GC 是我(仍然)珍视的东西。当我开始更深入地学习 C++ 时,我不禁想知道为什么我会在它们如此 unmanaged 的情况下使用普通指针而不是其他替代解决方案?
shared_ptr 提供了一种存储引用的好方法,并且在不删除它们的情况下不会丢失它们的轨道。我可以看到 normal 指针的实用方法,但它们似乎只是不好的做法。
有人可以说明这些替代方案吗?
【问题讨论】:
-
你不能不假思索地在任何地方使用
shared_ptr(相反,你可以对所有东西使用GC管理的引用),因为当你不可避免地创建循环引用时你会傻眼了。当您编写 C++ 程序时,您必须考虑所有权。只是没有办法解决它。这并不是说你不应该使用它们(你应该),但选择正确的并不是一件容易的事。 -
另外,复制
shared_ptr以及让它超出范围会产生明显的开销,因为它在最好的情况下需要原子操作,在最坏的情况下会锁定(标准保证这是线程-安全的)。复制原始指针几乎是无操作的。 -
@Damon 实际上,在 C++ 中,您可能比在 C# 中更少考虑所有权,因为您应该使用值语义(并且您不必考虑谁拥有对象堆)。我在 Java 中遇到问题的原因是所有权(从最大的意义上讲)不清楚。 (例如,谁“拥有”
java.awt.Component.getSize()返回的java.awt.Dimension?) -
所以 unmanaged 指针,是的,时间过得很快。
标签: c++ shared-ptr unique-ptr