c++ - 将指针分配添加到 vector 后删除它

标签 c++ vector allocation

一旦在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/

相关文章:

c++ - 来自多页 TIFF 图像的体素大小标签

c++ - 当我检测到 vector 变化时更改特定值

iOS:工具、分配达到峰值至持平线

c++ - 通过指针传递数组

c++ - 从 std::vector 查找 std::map 中的对象

c++ - 通过迭代器从 std::vector 中移除

c++ - 比较 std::vector 大小时出错

python - 从给定的 I 和 D 序列中形成最小数

Java对象创建和内存大小

c++ - 使用类的 vector