首页 > 解决方案 > 模板中的智能指针 c++

问题描述

创建一个SmartPointer应包含指向任何对象的指针的类模板,并在调用该类的析构函数时删除该对象。为了使智能指针的行为与原始指针的行为相同,您必须将运算符*->.

所以,这是我的任务,我已经完成了这段代码,但是->操作员不行。如果有人知道如何解决它,请帮助我。

template <class T>
class SmartPointer {
private:
    T* x;
public:
    T& operator*() {
        return *x;
    }
    T& operator->(){
        return this();
    }
    SmartPointer(T *X);
    ~SmartPointer();
};

template<class T>
SmartPointer<T>::SmartPointer(T *X) {
    this->x = X;
}

template<class T>
SmartPointer<T>::~SmartPointer() {
    delete x;
}

标签: c++c++11

解决方案


operator->函数应该返回一个指针。它应该是一个指向被包装对象的指针:

T* operator->()
{
    return x;
}

推荐阅读