如果析构函数用于向量中的对象,是否将调用该析构函数?

k

这是我课程中的一项作业,我很难理解其背后的原因。

我们有一个没有指针的Person类和一个Car类,如下所示:

class Car{
public:
  //stuff
private:
  Person* owner;
};

然后是一个如下函数:

void f() {
  vector<Car> v;
  // do stuff with the vector
}

函数完成后,会发生内存泄漏,为解决此问题,课程材料建议您遍历向量中的每个Car并删除函数f()末尾的所有者指针。仅仅为Car编写一个析构函数来删除其所有者以防止内存泄漏是不够的吗?

通过在Car类中简单地添加以下内容:

~Car() {
  delete owner;
}
谢尔盖·A

不,这肯定是不够的。您的课程是否正确遵循5的规则?即您是否已正确定义或删除了复制构造函数,分配运算符,移动构造函数和移动分配?您真的准备好自己管理该指针了吗?

我有两种解决方案供您选择。

  1. 完全不要使用指针。从代码中还不清楚为什么需要指针Person而不是类型的对象PersonPerson是多态地s成员吗?除非必须使用非指针。
  2. 如果确定需要一个指针,请使用可自行管理的指针。std::unique_ptr应该是您的第一站,如果您确定需要共享所有权,请使用std::shared_ptr

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

析构函数在C ++中调用向量

来自分类Dev

如果函数提前返回或引发异常,是否将调用对象的析构函数?

来自分类Dev

返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

来自分类Dev

析构函数中的析构函数?

来自分类Dev

析构函数调用

来自分类Dev

向量擦除调用的错误析构函数

来自分类Dev

从析构函数调用线程的向量

来自分类Dev

调用对象的析构函数是否等效于对该对象调用delete?

来自分类Dev

在函数调用期间析构对象

来自分类Dev

delete []是否调用析构函数?

来自分类Dev

是否在Exit()上调用基本对象析构函数?

来自分类Dev

是否在Exit()上调用基本对象析构函数?

来自分类Dev

您如何测试是否将调用Ruby析构函数?

来自分类Dev

您是否在C ++中的析构函数中调用delete?

来自分类Dev

如果调用了子类的析构函数,是否可以停止对其基类的析构函数的调用?

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

从列表中调用元素的析构函数

来自分类Dev

C ++中的析构函数直接调用

来自分类Dev

从析构函数调用BeginInvoke

来自分类Dev

TypeScript中是否有析构函数

来自分类Dev

QDialogs中是否需要析构函数?

来自分类Dev

结构对象析构函数

来自分类Dev

显式调用子析构函数是否也调用父析构函数

来自分类Dev

std:map析构函数会调用键析构函数还是值析构函数?

来自分类Dev

.NET中的析构函数

来自分类Dev

在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

来自分类Dev

C ++析构函数是否总是或仅有时调用数据成员析构函数?

来自分类Dev

为什么在此处调用析构函数以及在调用该对象析构函数后如何调用对象成员函数?

来自分类Dev

智能指针析构函数调用的向量

Related 相关文章

  1. 1

    析构函数在C ++中调用向量

  2. 2

    如果函数提前返回或引发异常,是否将调用对象的析构函数?

  3. 3

    返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

  4. 4

    析构函数中的析构函数?

  5. 5

    析构函数调用

  6. 6

    向量擦除调用的错误析构函数

  7. 7

    从析构函数调用线程的向量

  8. 8

    调用对象的析构函数是否等效于对该对象调用delete?

  9. 9

    在函数调用期间析构对象

  10. 10

    delete []是否调用析构函数?

  11. 11

    是否在Exit()上调用基本对象析构函数?

  12. 12

    是否在Exit()上调用基本对象析构函数?

  13. 13

    您如何测试是否将调用Ruby析构函数?

  14. 14

    您是否在C ++中的析构函数中调用delete?

  15. 15

    如果调用了子类的析构函数,是否可以停止对其基类的析构函数的调用?

  16. 16

    C ++中的析构函数直接调用

  17. 17

    从列表中调用元素的析构函数

  18. 18

    C ++中的析构函数直接调用

  19. 19

    从析构函数调用BeginInvoke

  20. 20

    TypeScript中是否有析构函数

  21. 21

    QDialogs中是否需要析构函数?

  22. 22

    结构对象析构函数

  23. 23

    显式调用子析构函数是否也调用父析构函数

  24. 24

    std:map析构函数会调用键析构函数还是值析构函数?

  25. 25

    .NET中的析构函数

  26. 26

    在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

  27. 27

    C ++析构函数是否总是或仅有时调用数据成员析构函数?

  28. 28

    为什么在此处调用析构函数以及在调用该对象析构函数后如何调用对象成员函数?

  29. 29

    智能指针析构函数调用的向量

热门标签

归档