【问题标题】:Array of pointers to base pointers using vector使用向量指向基指针的指针数组
【发布时间】:2015-06-17 12:28:44
【问题描述】:

我正在尝试将派生对象添加到基指针数组中。

我的班级定义如下(因为这是一个不能更改的作业):

Base** bases;

现在我正在使用一个基指针数组:

Base** bases=new Base*[2];

然后像这样添加元素:

bases[0]=new Derived1;
bases[1]=new Derived2;

如果不是因为我似乎无法追踪的内存泄漏,这很好用。我读到我可以将向量用于类似目的,并具有更好的内存管理。

我试过了:

vector<Base*>basesV;
basesV.push_back(new Derived1);
basesV.push_back(new Derived2);

它似乎有效,但我如何将向量 basesV '附加'到我的类 Base** 基础中?

简单的bases=basesV;似乎不起作用。我是否被困在使用基指针数组?

我还有一个接受 Base** 的函数,删除上面的向量似乎也不起作用。

感谢您的帮助。

【问题讨论】:

  • 如果这是一项任务,那么通过挂钩向量来解决整个事情似乎不太可能是可以接受的。对于分配的约束,这是一个“聪明的草皮”解决方法。如果我们能看到您如何释放资源会更好,以便我们可以帮助您解决内存泄漏问题,但您没有提交testcase
  • 虽然我很欣赏你认识到,在现实世界中,矢量会使 far 更有意义。不过,在现实世界中,尽量不要存储原始指针。
  • 是的,我正在向教授发送电子邮件。实际的任务是,您必须使用提供的头文件。我们得到的只是一段关于程序应该做什么、头文件和正在运行的程序的打印输出。向量仍然给我泄漏,它不像我想象的那样自动化......(请参阅我对下面答案的回复)。
  • 嗯,你正在存储指针。那些指针被清理了。但是你仍然需要清理指针。通常,正如我所说,您不想存储原始指针。
  • 你还没有告诉我们你delete所有这些对象在哪里......?

标签: c++ arrays pointers vector


【解决方案1】:

如果我理解正确的话……

bases = &basesV[0];

还要确保你的 Base 析构函数是虚拟的。

【讨论】:

  • 感谢您将向量放入函数(Base**)中。尽管它在构造函数中不起作用,但重载运算符。有意义,因为它超出了范围。话虽如此,我对向量使用了静态,它在构造函数和重载运算符中工作。有一件事我如何确保清理任何内存使用。我还有一堆内存泄漏。尽管我承认我还没有对在上述构造函数和重载运算符中使用的向量进行任何清理。谢谢。
  • 如果你有一个 Base* 的向量,你需要在你的向量超出范围之前删除你的向量的每个元素。矢量析构函数不会在您的 Base 元素上为您调用 delete。另外,请务必阅读以下内容:stackoverflow.com/questions/461203/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 2016-07-30
相关资源
最近更新 更多