考虑以下:
std::vector<std::unique_ptr<int>> ptrsToInts;
ptrsToInts.emplace_back(new int);
如果向量中发生重新分配,并且失败(抛出std::bad_alloc
),我是“安全”还是会泄漏int
?
C++11 23.3.6.5 [vector.modifiers]/1 说:
如果除复制构造函数、移动构造函数、赋值运算符或移动赋值运算符之外的
T
任何InputIterator
操作引发异常,则没有任何影响。
这似乎表明这是一个潜在的问题。也就是说,如果“没有效果”,那么就不会构造任何东西,因此不会发生unique_ptr
依赖于该指针的析构函数行为。delete
(这可能表明emplace_back
应该禁止unique_ptr
s 的容器)