A-A+
有如下程序: #include<cstring> #include<iostream> us
问题详情
有如下程序: #include<cstring> #include<iostream> using namespace std; class MyString{ public: MyString(const char * s); ~MyString(){delete[ ]data;} protected: unsigned len; char * data; }; MyString::MyString(const char * s){ len=strlen(s); data=new char[1en+1]; strcpy(data,s); } int main(){ MyString a("C++Progreanfing"); MyString b(A) ; return 0; } 在运行上面的程序时出错,错误的原因是
A.构造函数的实参不允许是本类的对象
B.没有定义实现深层复制(深复制)的复制构造函数
C.构造对象a时实参与形参类型不符
D.系统不能生成缺失的复制构造函数请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:B
解析:当类中的数据成员有指针时,必须使用深层复制构造函数,否则会发生指针悬挂。在进行函数析构时,会出现指针丢失现象。