您的位置:首页 > 运维架构

copy and swap

2012-06-05 22:34 351 查看
  重载"="运算符,实现异常安全的

 

#ifndef WIDGET_H

#define WIDGET_H

#include <iostream>

using namespace std;

class Widget

{

public:

Widget(int* elem);

~Widget(){delete _elem;cout<<"~~~"<<endl;}

Widget(const Widget& co);

Widget& operator=(const Widget& co);

void swap(Widget& co);

void show() const{cout<<*_elem<<endl;}

private:

int* _elem;

};


#endif // WIDGET_H
#include "widget.h"
Widget::Widget(int *elem):_elem(elem)
{
}
Widget::Widget(const Widget &co)
{
_elem = new int(*co._elem);
}
Widget& Widget::operator=(const Widget&co)
{
Widget temp(co);
swap(temp);
return *this;
}
void Widget::swap(Widget &co)
{
int *temp = _elem;
_elem = co._elem;
co._elem = temp;
}
#include <iostream>
#include "decoratorclass.h"
#include "subclass_1.h"
using namespace std;
#include "test.h"
#include "widget.h"
int main()
{
Widget w1(new int(2));
cout<<"show w1_elem:";
w1.show();
Widget w2(new int(4));
cout<<"show w2_elem:";
w2.show();
cout<<"w1 = w2";
w1 = w2;//这里有一次析构,因为使用了局部变量,所以运行时,有三次“~~”不要奇怪
cout<<"show w1_elem:";
w1.show();
return 0;
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: