【问题标题】:Regarding deleting array of dynamic objects关于删除动态对象数组
【发布时间】:2019-05-29 09:26:21
【问题描述】:

如何删除下面这个sn-p中创建的动态对象数组?

我试图在论坛中浏览一些以前的答案,但没有人可以为我指出答案。

#include <iostream>
struct Card{int x;};
int main()
{
    std::vector<Card*> S;
    for (int i = 0; i < 3; i++)
    {
        Card* o = new Card;
        o->x = i;
        S.push_back(o);
    }



    for (auto a : S)
        std::cout << "Opening from the container " << a->x << '\n';

//delete o; --------> How to delete the array of objects???
return 0;
}

【问题讨论】:

标签: c++ visual-c++


【解决方案1】:

通过遍历向量并调用delete

for(auto& elem : S)
{
  delete elem;
}

此外,使用(const) auto&amp; 而不是auto 对容器进行范围循环以防止复制是一个好习惯。

此外,由于您使用基于范围的 for 循环,这意味着您可以访问智能指针,因此实际上您根本不应该调用 delete 也不应该存储原始指针。

要么将实际对象存储在向量中,要么存储智能指针,如std::unique_ptr

【讨论】:

  • 在循环中做delete elem时,根本不需要使用引用。 delete elem 基于指针的值工作,如果循环使用引用,则不会改变。
猜你喜欢
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2021-01-12
  • 1970-01-01
  • 2021-06-17
  • 2015-05-21
  • 1970-01-01
相关资源
最近更新 更多