一旦在C++中向 vector 添加一个对象,并删除指向该对象的指针, vector 内的对象也会被删除吗?
例如,
int i = 0;
std::vector<A> aVect;
while(i++ < 10)
{
A *ptrToA = new A();
aVect.push_back(*ptrToA);
delete ptrToA;
}
调用仍然有效:
aVect.at(2);
调用“delete”会破坏添加到 vector 中的对象,还是只会释放指针的对象?
最佳答案
是的,您可以删除指针,因为正如其他人指出的那样,您取消引用指向它的指针会按值复制到 vector 中。
像这样构建 vector 并完全避免新建/删除会更有效:
int i = 0;
while(i++ < 10)
{
std::vector<A> aVect;
aVect.push_back(A());
}
在 C++11 中,不会创建拷贝 - 将使用 push_back 的右值版本 - A 将被构造到 vector 中的槽中。
您可能不想每次都创建一个新 vector ???
std::vector<A> aVect;
int i = 0;
while(i++ < 10)
{
aVect.push_back(A());
}
关于c++ - 将指针分配添加到 vector 后删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666169/