我写了一个更智能的指针类。并使以下代码正确
ZhjSmartPointer<int> a(new int);
assert(a != NULL);
我像这样重载 != 运算符:
bool operator !=(T *ptr) const;
但是,这会导致如下编译错误:
ZhjSmartPointer.h:132: 注意: 候选 1: bool ZhjSmartPointer::operator!=(T*) const [with T = Test] test.cpp:41: 注意: 候选 2: operator!=(int, int)
我对如何将 aZhjSmartPointer
转换为a 感到困惑int
SmartPointer 类的代码如下:
template <typename T>
class ZhjSmartPointer {
public:
ZhjSmartPointer();
explicit ZhjSmartPointer(T *ptr);
ZhjSmartPointer(const ZhjSmartPointer &smartPtr);
ZhjSmartPointer &operator =(const ZhjSmartPointer &smartPtr);
~ZhjSmartPointer();
operator bool() const;
T &operator *() const;
T *operator ->() const;
bool operator ==(const ZhjSmartPointer &smartPtr) const;
bool operator !=(const ZhjSmartPointer &smartPtr) const;
bool operator ==(T *ptr) const;
bool operator !=(T *ptr) const;
private:
void copyPtr(const ZhjSmartPointer &smartPtr);
void deletePtr();
T *ptr_;
size_t *refCnt_;
};
我猜是因为我重载了'bool'运算符,'ZhjSmartPointer -> bool -> int'会导致这个问题。对吗?
对不起,这只是一个编译警告,而不是错误。有人建议我不要用参数(T *)重载!=,毕竟我们已经重载了'bool'。写这样的代码就可以了:
ZhjSmartPointer a(new int);
如果 (a) { ..........
}