智能指针auto_ptr的简单实现
来源:互联网 发布:怎么获得淘宝代金券 编辑:程序博客网 时间:2024/05/18 19:19
智能指针有很多实现方式, auto_ptr相对来说 是个比较拙劣的实现, 没有用到引用计数。
所以用起来有很多问题。
一般来说 引用计数性的智能指针 拷贝一下 成员 计数变量加一个1. 然后当这个计数变为0 的时候 这个实际指向的内存就可以 delete掉了。 这样的话 可以解决auto_ptr被析构两次 打来的问题。
下面这段代码是 auto_ptr的实现 ,在vc2005 编译运行 没有问题, 但是VC6 有问题。 VC6 对于模板的支持很糟糕
如果这段代码 在VC6 不会调用它的拷贝构造。
有个问题就是 more effective C++ 第293-294 页 有对auto_ptr的实现,但是 我不知道是编译器的问题 还是作者有意弄错了 那段代码是编译不过的。
主要是申明友元类的那段。
template<class U> friend class auto_ptr<U>;
这段代码注释起来就没问题了 ,这个原因 ,欢迎大家讨论。 下面给出vs2005下 我实现的 auto_ptr.
望能 抛砖 而 引出 玉来。
template <class T>class auto_ptr{public:explicit auto_ptr(T * t = 0):ptr(t){ }template <class U>auto_ptr(auto_ptr<U> & src_ptr):ptr(src_ptr.realse()){printf("拷贝构造!\n");}~auto_ptr(){delete ptr;}template <class U>auto_ptr<T> & operator= (auto_ptr<U> &ptr){if (this != &ptr){printf("赋值构造!\n");reset(ptr.realse());}return *this;}T * operator->(){return ptr;}T & operator*(){return *ptr;}T * realse(){T * old = this->ptr;this->ptr = 0;return old;}void reset(T * src = 0){if (src != ptr){delete this->ptr;this->ptr = src;}}private:T * ptr;//template<class U> friend class auto_ptr<U>;};void test(){auto_ptr<int> test(new int);*test = 100;printf("%d\n", *test);auto_ptr<int> test1 ( test);printf("%d \n", *test1);}int main(int argc, char* argv[]){test();system("pause");return 0;}
0 0
- 智能指针auto_ptr的简单实现
- 【C++】智能指针auto_ptr的简单实现
- c++智能指针auto_ptr的实现
- 基于auto_ptr源码的智能指针实现
- C++标准库中简单智能指针auto_ptr的模仿实现源码
- 智能指针auto_ptr的使用
- auto_ptr智能指针的用法
- auto_ptr智能指针的缺点
- 智能指针的模拟实现 auto_ptr scoped_ptr shared_ptr
- STL auto_ptr智能指针简单分析
- STL+auto_ptr智能指针简单分析
- STL+auto_ptr智能指针简单分析
- 智能指针auto_ptr简单使用例子
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针(一):STL auto_ptr实现原理
- 智能指针:模拟实现auto_ptr,scoped_ptr,shared_ptr
- Java/Android开发规范——变量和常量命名
- NYOJ 93
- Flatten Binary Tree to Linked List
- J2EE——JNDI
- Sunday,每周日,身体自检
- 智能指针auto_ptr的简单实现
- 黑马程序员_java高新技术之动态代理
- android之Intent
- 大周末的
- Posix信号量
- 自定义Set
- Ural 1500Pass Licenses(状态压缩dfs)
- android 土豪体验器(精简版 )
- 黑马程序员------- 银行业务调度系统 -------