2010-03-18 35 views

回答

13

无法复制的类。 STL容器要求对象可复制,因为容器拥有该对象的副本,并且需要能够移动它。

+7

尽管*指针*(和智能指针)到无法复制的类都可以。 – 2010-03-18 05:28:53

+0

除了'std :: auto_ptr'。不要这样做!虽然'std :: tr1 :: shared_ptr'没问题。 – Nate 2010-03-22 19:30:45

4

根据您执行的操作,除了可以为存储在容器中的对象进行复制之外,您通常还需要一个默认构造函数。对于传递给算法的对象,还有其他要求,例如可调用或可增量。这些要求是有据可查的。

9

我最不喜欢放入STL容器的东西是std :: auto_ptr ...非常糟糕的事情发生。 ..大多数意想不到的失去我认为的对象。

一般来说,任何不可复制的东西都不能进入容器 - 你会得到编译错误。异常复制语义(如auto_ptr)的东西不应该放在容器中(但你可能不会得到任何编译器错误)。由于容器可以自由创建各种临时副本。

我认为,没有一个“理智”的默认构造函数和赋值运算符,你也有一些痛苦。

2

类的析构函数可能不会抛出异常......以及无级永远应该在析构函数

0

依赖于容器,以获取更多信息的扔,该标准的第23条规定了所有容器的要求,方法。

为了安全起见,虽然,你应该假设如下始终要求: 默认构造和拷贝建设

相关问题