因为我使用了c ++所以它通过了很多,所以这里(可能是愚蠢的)问题:
一个基本的智能指针Object应该像普通的指针一样,所以在典型的实现中我们将*和->运算符添加到对象中,如下所示:
template <class T> class auto_ptr
{
T* ptr;
public:
explicit auto_ptr(T* p = 0) : ptr(p) {}
~auto_ptr() {delete ptr;}
T& operator*() {return *ptr;}
T* operator->() {return ptr;}
// ...
};
Run Code Online (Sandbox Code Playgroud)
现在,在我的知识中,c ++ *运算符(dereference)代表:"通过ptr的值获取堆中指向的值"(是不是?),*ptr应该是类型T.那么为什么我们会返回一个地址呢?
T& operator*() {return *ptr;}
Run Code Online (Sandbox Code Playgroud)
代替:
T operator*() {return *ptr;}
Run Code Online (Sandbox Code Playgroud)
其次,通过以下代码段:
void foo()
{
auto_ptr<MyClass> p(new MyClass);
p->DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
现在,我怎么才能ptr->DoSomething()通过写作来访问方法p->DoSomething()?从逻辑上讲,我会写错了代码:
p->->DoSomething();
Run Code Online (Sandbox Code Playgroud)
因为p->返回a T*然后我需要另一个->运算符来访问该DoSomething()方法.
感谢您的回答/澄清,并抱歉最终糟糕的英语.