【发布时间】:2015-02-12 03:38:51
【问题描述】:
最近我遇到了一些意见,认为我不应该使用指针向量。 我想知道 - 为什么我不能?
例如,如果我有一个班级 foo,则可以这样做:
vector <foo*> v;
v.push_back(new foo());
我已经看到有人反对这种做法,这是为什么呢?
【问题讨论】:
-
对象不会自动销毁。为此,请使用 Boost 的
ptr_vector或vector<unique_ptr<>>。 -
我认为这是因为所有 std 容器都会复制它们拥有的所有元素,因此,如果我们在
std::vector中有一个指针,并且你修改它,你实际上并没有修改初始指针 -
I wanted to know - why I cant?你可以——但最好使用智能指针。没有上下文,处理不良做法的问题毫无意义。请在问题本身中包含不同意见。 -
问题不在于使用指针向量。问题是它们指向新对象,不清楚谁拥有这些对象。
-
C++ 人倾向于支持由语言特性强制执行的 RAII 习语。如果您对
std::vector和对象范围有足够的了解,那么就没有问题——但您确实无法通过这种方法充分利用容器和所有权语义。这也使得异常安全性更难保证。