读书人

C++复制构造函数小疑点

发布时间: 2012-08-31 12:55:03 作者: rapoo

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++ code
Test(const Test&s){ /*这里应该填什么使得程序正常运行不崩溃?其他地方不能改哦。*/p =new int; //复制指针指向的内容   memcpy(p,s.p,4); cout<<1;}
[解决办法]

3楼的代码对的

main函数得这样调用

Test t;
t.set(1);
Test t1(t);
return;

[解决办法]
++
探讨

C/C++ code

Test(const Test&s)
{
/*这里应该填什么使得程序正常运行不崩溃?其他地方不能改哦。*/
p =new int; //复制指针指向的内容   
memcpy(p,s.p,4);
cout<<1;
}

[解决办法]
const_cast<MyClass*>(value) 用来改变value的常量性
[解决办法]
探讨

引用:
你的构造函数p没有置0,析构就挂了。

就是因为构造函数的指针没有初始化为0,才需要Test* tmp = const_cast<Test*>(&s);p=0;tmp->p=0;这样做呢。但是我不清楚Test* tmp = const_cast<Test*>(&s);这行的意思。。。

[解决办法]
Test* tmp = const_cast<Test*>(&s);
的意思就是把s取地址后转化为一个Test*指针啊。

还有,楼上说的对,你构造函数中没有把p初始化为NULL,那么如果没有调用SetTest,没有调用拷贝构造函数,你直接析构用delete p会出问题啊,因为这时你的p是随机的
[解决办法]
解决方法是p=0;但构造函数的参数是const &s,就是说不能改变s的成员,如果使用const_cast则把s变为了非const,就可以改变s的成员了

读书人网 >C++

热点推荐