我的代码编译并运行,但我被告知这是很成问题的.我不明白我哪里出错了.
而且,声称"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];
}
Run Code Online (Sandbox Code Playgroud)
是的,这条线上有一个明确的错误.
_arrName[2]= '\0';
Run Code Online (Sandbox Code Playgroud)
_arrName是一个两个数组,char所以你只能使用这两个值_arrName[0]和_arrName[1]._arrName[2]超出范围.
此线路也存在问题.
virtual ~Base() { cout << "Base dtor of " << _name << endl; };
Run Code Online (Sandbox Code Playgroud)
因为派生类指向派生类_name的数组成员,所以在~Base()调用时,此数组将被销毁,并且_name将不再指向有效数组.
基类中可能存在错误._name永远不会初始化,所以它依赖于初始化它的派生类.这不是理想的设计,但在实践中它可能会或可能不会导致真正的问题.
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |