|
|
4鱼币
本帖最后由 魁拔 于 2012-9-4 19:27 编辑
小甲鱼C++教程第36讲的副本构造器问题
#include<iostream>
#include <string>
class MyClass
{
public:
MyClass ( int * p );
~MyClass ();
MyClass& operator = ( const MyClass &rhs );
void print();
private:
int * ptr;
};
MyClass::MyClass( int * p )
{
ptr = p;
}
MyClass::~MyClass()
{
delete ptr;
}
MyClass& MyClass::operator = ( const MyClass &rhs )
{
if( this != &rhs )
{
delete ptr;//这句话是做什么的,去掉了对结果没有影响,我试过的
ptr = new int;//这句话是做什么的,去掉了对结果没有影响,我试过的
*ptr = *rhs.ptr;
}
else
{
std::cout << "赋值号两边为同个对象,不做处理!\n";
}
return *this;
}
void MyClass::print()
{
std::cout << *ptr << std::endl;
}
int main()
{
MyClass obj1( new int(1) );
MyClass obj2( new int(2) );//副本构造器究竟是什么东东,还是迷糊迷糊,求明白人讲讲,谢谢了
//可以在前面先定义,就像这样,int i = 1, j = 2,
//然后直接在这里用MyClass obj1( &i );MyClass obj1( &j );
//但是我试过了,不可以,求解释
obj1.print();
obj2.print();
obj2 = obj1;
obj1.print();
obj2.print();
return 0;
}
|
|