gpt4 book ai didi

c++ - 唯一指针 nullptr 比较

转载 作者:行者123 更新时间:2023-11-30 02:40:31 25 4
gpt4 key购买 nike

我有一个简单的 AutoPtr 类

template<typename T>
class AutoPtr
{
public:
explicit AutoPtr(T* p = NULL):m_ptr(p){}
~AutoPtr()
{
if(m_ptr)
delete m_ptr;
m_ptr = NULL;
}

T& operator*(){return *m_ptr;}
T* operator->(){return m_ptr;}
T* Get() { return m_ptr; }

private:
T* m_ptr;
};

如何使此类可用于以下操作:

AutoPtr<MyClass> ptr;
if(ptr)
{
// Do stuff!
}

我试过了

bool operator==(const T& other) { return m_ptr == other.m_ptr; }
bool operator!=(const T& other) { return !(*this == other);}

template<typename T>
bool operator==(const AutoPtr<T>& x, void* y) { return x.Get() == y; }
template<typename T>
bool operator!=(const AutoPtr<T>& x, void* y) { return x.Get() != y; }

这不是作业,我可能不会使用 c++11 或 boost。

最佳答案

您可以通过以下方式定义运算符

explicit operator bool() const { return m_ptr != NULL; } 

如果您的编译器不支持显式说明符,那么另一种方法是定义运算符

operator const void *() const { return m_ptr; }

在最后一种情况下,您可以将类与 operator << 一起使用

例如

std::cout << AutoPtr() << std::endl;

关于c++ - 唯一指针 nullptr 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28862555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com