一个auto_ptr的问题
发信人: Mobem (Waiting...), 信区: CPlusPlus
标 题: 问一个auto_ptr的问题
发信站: 水木社区 (Tue Nov 6 11:45:18 2007), 站内
class A
{
protected:
int a;
public:
A(int n){a = n;}
void f(){std::cout<<"f is invoked!"<<'\n';}
};
int main(int argc, char *argv[])
{
A* pp = new A(4);
std::auto_ptr<A> p(pp);
p->f();
p.operator->()->f();
return 0;
}
程序执行时p->f()和p.operator->()->f()的结果一样,看了auto_ptr模板类的实现,发现其中对->操作符的定义如下:
_Tp* operator->() const __STL_NOTHROW {
return _M_ptr;
}
不理解的是p->f()这个调用是如何做到的?难道在调用时做了p到p.opertaor->()的隐式转换?但在auto_ptr模板类的定义中没有看到opertor _TP*()的定义啊。
--
x->m
x.operator->()->m
x.operator->().operator->()->m
..
you are right
【 在 devilphoenix (初號機·神·小白) 的大作中提到: 】
: An expression x->m is interpreted as (x.operator->())->m for a class object x of type T if T::operator->() exists and if the operator is selected as the best match function by the overload resolution mechanism (13.3).
: 没看懂你是啥意思
http://www.newsmth.net/bbstcon.php?board=CPlusPlus&gid=204956