先看题:
定义类Adam成员函数 A *f(A a) const 时,下列哪个适合作为函数返回值:
(A) &a
(B) 类 A 中定义的类型为 A* 的静态数据成员
(C) this
(D) dynamic_cast<A *>(&a)
函数f传入的参数a,是由拷贝构造函数生成的临时对象,在函数结束时会消亡;
验证:
class A{
public:
~A() //析构函数
{
cout << "destructor_called" << endl;
}
A *f(A a) const
{
cout << "f(A a) is called" << endl;
return &a;
}
};
int main()
{
A a;
a.f(a);
return 0;
}
运行结果: 同时报错 [Warning] address of local variable 'a' returned
因此,A和D可以排除,函数结束后,返回的这个A *指针是不安全的(虽然不等于NULL,而且可以访问,可能是测试有问题)
顺便,C里this指针是常指针,这样返回把const A *转变成了A *,编译报错;