繁体   English   中英

这是一个聪明的指针吗?

[英]Is this a smart pointer?

请看下面的代码。 这是一个聪明的指针吗? 如果是这样,为什么第一个对象p1悬挂在代码的末尾? (那是p2被析构函数删除但是p1仍然存在,为什么?)

#include <iostream>
#include <vector>
using namespace std;

template <class T> class my_auto_ptr {
    T* myptr;

public:
    my_auto_ptr(T* ptr = 0) : myptr(ptr) { }

    ~my_auto_ptr() {
        delete myptr;
    }

    T* operator ->() const {
        if (myptr != nullptr)  return myptr;
        else throw runtime_error("");
    }
    T& operator* () const {
        if (myptr != nullptr)  return *myptr;
        else throw runtime_error("");
    }
    T* release() {
        T* rptr = myptr;
        myptr = 0;
        return rptr;
    }
};

//----------------------------------

int main() try {
    my_auto_ptr<vector<int> > p1(new vector<int>(4, 5));
    cout << p1->size() << endl;

    my_auto_ptr<int> p2(new int(6));
    cout << *p2 << endl;

    return 0;
}

//-------------------------------

catch (...) {
    cerr << "Exception occurred.\n";
    return 1;
}

这是一个聪明的指针吗?

不可以。它是可复制和可分配的,但执行这些操作中的任何一个都将导致多次删除。 您需要确保它是不可复制和不可分配的,或者它实现3或5的规则

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM