- 有如下的程序:
#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[len+1];
strcpy(data,s);
}
int main()
{
MyString a("C++ Programming");
MyString b(a);
return 0;
}
在运行上面的程序时出错,出错的原因是( B)。
B
A
构造函数的实参不允许是本类的对象
B
没有定义实现深层复制(深拷贝)的拷贝构造函数
C
构造对象a时实参与形参类型不符
D
系统不能生成缺省的拷贝构造函数
解析:
本题中经过浅复制,a和b的data指针都指向了相同的字符串地址,这在程序结束的析构中会发生析构两次的情况,因而产生问题
- 已知类MyClass的定义如下:
class MyClass{
private:
int num;
public:
MyClass(int d):num(d){}
MyClass(const MyClass& original)