gpt4 book ai didi

C++——为什么我们应该使用运算符 -> 来访问 SmartPtr 的成员函数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:07 26 4
gpt4 key购买 nike

问题在最后两行代码中给出。

template<class T>                    // template class for smart
class SmartPtr { // pointers-to-T objects
public:
SmartPtr(T* realPtr = 0);

T* operator->() const;
T& operator*() const;

T* Detach( void )
{
T* pData = pointee;
pointee = NULL;
return pData;
}

private:
T *pointee;
...
};

class TestClass {}

SmartPtr<TestClass> sPtr(new TestClass);

TestClass* ptrA = sPtr->Detach();
// why I always see people use this method to access member functions of a Smart pointer.
// We can use sPtr-> b/c we have defined operator->() in SmartPtr.

TestClass* ptrB = sPtr.Detach();
// Question: Is this a valid C++ way? If not, why?

谢谢

最佳答案

SmartPtr<TestClass> sPtr(new TestClass);
TestClass* ptrA = sPtr->Detach();

实际上是无效的,因为TestClass没有成员函数DetachSmartPtr 类的 operator-> 声明为 T* operator->() const,因此(应该)返回 智能指针的指针对象

TestClass* ptrB = sPtr.Detach();

是有效版本,因为sPtr本身只是一个普通的局部栈变量,不是指针。

关于C++——为什么我们应该使用运算符 -> 来访问 SmartPtr 的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5207688/

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