gpt4 book ai didi

c++ - 有问题的代码???我的析构函数有问题吗?

转载 作者:行者123 更新时间:2023-11-28 01:10:08 25 4
gpt4 key购买 nike

我的代码可以编译并运行,但有人告诉我这是有问题的。我不明白我哪里出错了。

此外,声明“char _arrName[2];”难道不是错误的吗?并做作业“_arrName[2]='\0';” ?这不是“越界”错误吗?

#include <iostream>
using namespace std;
class Base {
protected:
char* _name;
public:
virtual ~Base() { cout << "Base dtor of " << _name << endl; };
};
class D1: public Base {
char _arrName[2];
public:
D1() {
_name= _arrName;
_arrName[0]= 'D';
_arrName[1]= '1';
_arrName[2]= '\0';
}
virtual ~D1() { cout << "D1 dtor" << endl; }
};
int main () {
Base* arr[2];
arr[0]= new D1();
delete arr[0];
}

最佳答案

是的,这一行确实有错误。

_arrName[2]= '\0';

_arrName 是两个 char 的数组,因此您只能使用 _arrName[0]_arrName[1 这两个值]_arrName[2] 超出范围。

这条线也有问题。

virtual ~Base() { cout << "Base dtor of " << _name << endl; };

因为派生类已经将_name指向了派生类的一个数组成员,所以在调用~Base()时这个数组已经被销毁了并且 _name 将不再指向有效数组。

基类中可能存在错误。 _name 从未被初始化,因此它依赖于派生类对其进行初始化。这不是理想的设计,尽管在实践中它可能会或可能不会导致真正的问题。

关于c++ - 有问题的代码???我的析构函数有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3849203/

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