C++ 泛型指针 auto_ptr
来源:互联网 发布:不合格品的数据分析 编辑:程序博客网 时间:2024/06/05 08:23
- #include <iostream>
- using namespace std;
- template <class T>
- class myauto_ptr
- {
- public :
- explicit myauto_ptr(T *p = 0) throw()
- :m_ptr(p) {}
- myauto_ptr(myauto_ptr<T> ©) throw()
- :m_ptr(copy.release()) {}
- myauto_ptr<T>& operator=(myauto_ptr<T> &other) throw()
- {
- if (this != &other)
- {
- delete m_ptr;
- m_ptr = other.release();
- }
- return *this;
- }
- ~myauto_ptr() { delete m_ptr;}
- T& operator*() const throw() { return *m_ptr; }
- T* operator->() const throw() { return m_ptr; }
- T* get() const throw() { return m_ptr; }
- void reset(T *p = 0) throw()
- {
- if (m_ptr != p)
- {
- delete m_ptr;
- m_ptr = p;
- }
- }
- T* release() throw()
- {
- T *temp = m_ptr;
- delete m_ptr;
- //m_ptr = 0; //省掉这句会有什么效果???
- return temp;
- }
- private:
- T *m_ptr;
- };
- int main()
- {
- myauto_ptr<int> pi(new int(1024));
- cout <<"pi:" << *pi << endl;
- myauto_ptr<int> pi1(pi);
- cout << "pi:" << *pi << endl;
- myauto_ptr<int> pi2(new int(2048));
- cout << *pi2 << endl;
- if (pi.get())
- *pi = 1024;
- else
- pi.reset(new int(1024));
- cout << *pi << endl;
- return EXIT_SUCCESS;
- }
第一次发表笔记,这是泛型指针的实现,属于异常安全的
但是不能用于STL泛型容器中,因为其copy 构造和赋值操作具有破坏性,不符合STL泛型容器的要求
但也可以修改myauto_ptr的copy construct 和 copy assignment,使其符合STL泛型容器的要求,但存在危险
- 泛型指针 auto_ptr
- C++ 泛型指针 auto_ptr
- 【C++】智能指针auto_ptr
- c++ auto_ptr智能指针详解
- 【C/C++和指针】auto_ptr智能指针
- 【C/C++】智能指针auto_ptr,share_ptr,unique_ptr
- 【C++】智能指针auto_ptr的简单实现
- C++——模版:智能指针auto_ptr
- C++:auto_ptr智能指针的用法
- 【C++】智能指针auto_ptr/unique_ptr/shared_ptr/weak_ptr!!!
- auto_ptr C++智能指针
- 关于智能指针 auto_ptr
- auto_ptr 智能指针要点
- 智能指针auto_ptr
- STL中的auto_ptr指针
- C++ auto_ptr 智能指针
- stl智能指针auto_ptr
- 智能指针auto_ptr解析
- C与C++左值
- 'or'='or'
- PHP+MySql简单投票系统代码
- 无名临时对象
- hibernate级联的3个属性
- C++ 泛型指针 auto_ptr
- 五一的感受
- 服务器的基本配置
- Chart 报表
- c++ 字符串包装类String
- 超简单的SHELL(有纠结的BUG)
- 关于C++多态的一个例子
- el表达式无效
- 今天开通了空间