【发布时间】:2020-01-01 07:58:37
【问题描述】:
我正在使用模板实现 unqiue 智能指针,但我不断收到编译器错误,提示用户定义转换无法指定返回类型。下面是我的头文件和 cpp 文件的代码。错误发生在 .h 的第 15 行和 .cpp 的第 48 行我已经尝试使用模板而不是使用模板,但它也不起作用。
//header
#ifndef UNIQUE_SMART_POINTER_H
#define UNIQUE_SMART_POINTER_H
#include <iostream>
using namespace std;
template <typename T>
class UniqueSmartPointer
{
private:
T *ptr;
public:
UniqueSmartPointer(T * p = nullptr);
UniqueSmartPointer(UniqueSmartPointer&ref);
const T* get()const;
T & operator* ();
T * operator-> ();
void reset(T *);
T * release();
bool operator bool();
//void swap(T x);
UniqueSmartPointer& operator=(UniqueSmartPointer& ref);
UniqueSmartPointer& operator=(UniqueSmartPointer && ref);
};
#endif
这是cpp
#include "UniqueSmartPointer.h"
#include <iostream>
using namespace std;
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(T * p): ptr(p)
{
}
template<typename T>
const T* UniqueSmartPointer<T>::get()const
{
return ptr;
}
template<typename T>
T & UniqueSmartPointer<T>::operator* ()
{
return *ptr;
}
template<typename T>
T * UniqueSmartPointer<T>::operator-> ()
{
return ptr;
}
template<typename T>
void UniqueSmartPointer<T>::reset(T * p)
{
if (ptr)
{
delete ptr;
}
ptr = p;
}
template<typename T>
T * UniqueSmartPointer<T>::release()
{
T * temp = ptr;
ptr = nullptr;
return temp;
}
template<typename T>
bool UniqueSmartPointer<T>::operator bool()
{
if (ptr)
return true;
return false;
}
template<typename T>
UniqueSmartPointer<T>& UniqueSmartPointer<T>::operator=(UniqueSmartPointer& ref)
{
if (*this == &ref)
return *this;
if (ptr)
delete ptr;
ptr = ref.ptr;
ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T>::UniqueSmartPointer(UniqueSmartPointer<T> &ref)
{
ptr = ref.ptr;
ref.ptr = nullptr;
}
template<typename T>
UniqueSmartPointer<T> & UniqueSmartPointer<T>::operator=(UniqueSmartPointer<T> && ref)
{
if (*this == &ref)
return *this;
if (ptr)
delete ptr;
ptr = ref.ptr;
ref.ptr = nullptr;
}
【问题讨论】:
-
让它只是
operator bool();bool的返回类型是隐含的 - 用户定义的到bool的转换返回任何其他东西是没有意义的。 -
离题:你的
UniqueSmartPointer类是一个模板类;在 cpp 类中实现它通常是一个坏主意。建议:在header中声明定义。
标签: c++ templates c++14 smart-pointers