gpt4 book ai didi

c++ - 如何在派生对象数组上使用析构函数?

转载 作者:行者123 更新时间:2023-11-28 06:47:16 24 4
gpt4 key购买 nike

我有三个关于虚拟析构函数的理论问题:假设我有一个基类 Base - 两个派生类 Derivative_1Derivative_2,类 Stand_Alone 和类 项目Stand_Alone 类在 BaseProject 中都用作私有(private)成员。Project 类具有私有(private)成员:Derivative_1 的对象、Derivative_2 对象的动态数组和 Stand_Alone 对象。对于这个例子,我们假设在 main 中只创建了一个 Project 对象。

  1. Project 的析构函数是否正确 - 取消分配对象的所有动态内存?
  2. 是否应该将 Base 的析构函数声明为 virtual
  3. Derivative_1Derivative_2 的析构函数不应声明为 virtual,对吧?

谢谢。

#ifndef PROJECT_H
#define PROJECT_H
#include "Stand_Alone.h"
#include "Derivative_1.h"
#include "Derivative_2.h"

class Project
{
public:
Project();
~Project()
{
delete [] support;
support = NULL;
}
protected:
private:
Stand_Alone member;
Derivative_1 head;
Derivative_2 *support;
};

#endif // PROJECT_H

最佳答案

  1. is the destructor of Project correct - de-allocating all dynamic memory of an object?

是的,尽管有更安全的方法。您可以声明一个 Derivative_2 对象的 vector ,而不用自己操作内存。这样您就根本不需要声明析构函数,因为编译器提供的默认析构函数可以很好地完成这项工作。

  1. should the destructor of Base be declared as virtual?

是的,这是确保在其任一子类的对象被销毁时调用它的唯一方法。

关于c++ - 如何在派生对象数组上使用析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24736598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com