C++复制构造函数小疑点
C++复制构造函数小问题C/C++ code#include iostreamusing namespace stdclass Test{public:Test(){}~Te
C++复制构造函数小问题
C/C++ code#include <iostream>using namespace std;class Test{public: Test(){} ~Test(){if (p) { delete p; } } Test(const Test&s){ /*这里应该填什么使得程序正常运行不崩溃?其他地方不能改哦。*/cout<<1;} void SetTest(int data){p=new int(data);}private: int *p;};void main(){ Test t; Test t1(t); return;}
[解决办法]C/C++ codeTest(const Test&s){ /*这里应该填什么使得程序正常运行不崩溃?其他地方不能改哦。*/p =new int; //复制指针指向的内容 memcpy(p,s.p,4); cout<<1;}
[解决办法]
3楼的代码对的
main函数得这样调用
Test t;
t.set(1);
Test t1(t);
return;
[解决办法]
++
[解决办法]
const_cast<MyClass*>(value) 用来改变value的常量性
[解决办法]
[解决办法]
Test* tmp = const_cast<Test*>(&s);
的意思就是把s取地址后转化为一个Test*指针啊。
还有,楼上说的对,你构造函数中没有把p初始化为NULL,那么如果没有调用SetTest,没有调用拷贝构造函数,你直接析构用delete p会出问题啊,因为这时你的p是随机的
[解决办法]
解决方法是p=0;但构造函数的参数是const &s,就是说不能改变s的成员,如果使用const_cast则把s变为了非const,就可以改变s的成员了