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;
}
相关文章推荐
- Copy-and-swap
- Copy-and-swap idiom详解和实现安全自我赋值
- What is the copy-and-swap idiom?
- 【C++深入探索】Copy-and-swap idiom详解和实现安全自我赋值
- C++中的异常安全、以及copy_and_swap
- swap function & copy-and-swap idiom
- Copy-and-swap
- 【C++深入探索】Copy-and-swap idiom详解和实现安全自我赋值
- copy and swap
- copy and swap
- 【C++深入探索】Copy-and-swap idiom详解和实现安全自我赋值
- Why do we need the copy-and-swap idiom?
- Copy-and-swap idiom详解和实现安全自我赋值
- C++异常安全、copy and swap
- C++的 copy-and-swap idiom 是什么
- C++使用技巧:copy and swap idiom
- C++黑魔法系列2: lvalue, move constructor, copy and swap
- copy and swap技巧与移动赋值操作符
- What is the copy-and-swap idiom?
- C++使用技巧:copy and swap idiom