class Mars
{
private:
int* ix ;
public:
Mars(int i_)
{
ix = (int*) malloc(sizeof(int)) ;
*ix = i_ ;
}
Mars(const Mars& m)
{
ix = (int*) malloc(sizeof(int)) ;
*ix = *(m.getptr()) ;
}
Mars& operator=(const Mars& m)
{
if(m.getptr() != ix)
{
*ix = *(m.getptr()) ;
}else
{
cout << "the same Mars object" << endl ;
}
return *this ;
}
Mars(Mars&& m)
{
ix = m.getptr();
m.getptr() = 0x00 ;
}
Mars& operator=(Mars&& m)
{
if(m.getptr() != ix)
{
*ix = *(m.getptr()) ;
m.getptr() = 0x00 ;
}
else
{
throw "move operator to self" ;
}
return *this ;
}
int* getptr() const { return ix; }
int*& getptr() { return ix; }
int print()
{
if(ix != 0x00)
return *ix;
}
void printix(){ printf("(%p)\n",ix); }
};
int main()
{
Mars m1(100) ;
Mars m2(m1) ;
Mars m3(1000) ;
m3 = m2 ;
cout << m1.print() << " " << m2.print() << " " << m3.print() << endl ;
m1.printix() ;
m2.printix() ;
m3.printix() ;
Mars m5(12345) ;
Mars m6 = std::move(m5) ;
cout << m5.print() << " " << m6.print() << endl ;
m5.printix() ;
m6.printix() ;
Mars m7(135) ;
Mars m8(246) ;
try
{
m7 = std::move(m8) ;
cout << m7.print() << " " << m8.print() << endl ;
m7.printix() ;
m8.printix() ;
}catch(...)
{
cout << "catch !! " << endl ;
}
}
output :
100 100 100
(0xb49010)
(0xb49030)
(0xb49050)
0 12345
((nil))
(0xb49070)
246 0
(0xb49090)
((nil))
留言列表