我知道您必须小心使用自动指针(以及为什么),尤其是使用 STL。但我认为这没有问题:
std::map<T1, std::auto_ptr<T2> >;
这安全吗?
我看到它会如何闯入 an std::vector
,因为它必须不时复制其项目,但这对于 an 的值类型也是如此std::map
吗?
编辑:显然,无论它是否安全,我都无法(技术上)填充地图,但我会将这个问题留给理论考虑。否则,认为它已关闭。
我知道您必须小心使用自动指针(以及为什么),尤其是使用 STL。但我认为这没有问题:
std::map<T1, std::auto_ptr<T2> >;
这安全吗?
我看到它会如何闯入 an std::vector
,因为它必须不时复制其项目,但这对于 an 的值类型也是如此std::map
吗?
编辑:显然,无论它是否安全,我都无法(技术上)填充地图,但我会将这个问题留给理论考虑。否则,认为它已关闭。
这不安全。从技术上讲,std::auto_ptr
不符合CopyConstructible或Assignable的要求,因为使用auto_ptr
的复制构造函数或复制赋值运算符创建的副本不等同于复制操作后的副本源。对于与任何标准容器一起使用的任何类型,都必须满足这些要求。
您可能会发现您似乎在一个特定用例的一种实现中获得了您期望的行为,但是如果您违反了容器的要求,您就不能期望您的代码在所有情况下都能正常工作。
还是不安全。如果不出意外,第一次从地图中检索指针时,您将转移所有权并使其无效。
auto_ptr 有一个非常狭窄的有效用例。我唯一记得遇到过的情况是,当一个对象想要明确表明它对您传递给它的指针负责时,它拥有所有权和责任。