这里我想使用自动指针访问类成员函数。最初我输入自动指针然后使用new分配内存。之后我尝试访问A类的成员函数。我给出了以下错误。在' - >'标记之前预期的不合格ID pt_a-> a_fun();
#include<iostream>
#include<memory>
using namespace std;
class A{
public:
void a_fun() {
cout<<"CLASS-A"<<endl;
}
};
int main() {
typedef auto_ptr<A> pt_a;
Auto pointer pointing to class A
pt_a(new A);
pt_a->a_fun();
return 0;
}
答案 0 :(得分:4)
几点:
您标记了C ++ 11,因此请勿使用std::auto_ptr
。它在2011年被弃用,并在2017年被淘汰。
typedef ... pt_a;
使pt_a
成为一种类型。因此pt_a->a_fun()
将是不正确的。您不能在类型上使用成员访问权限,而是需要一个对象。
pt_a(new A);
会创建一个对象。临时对象。它立即被清理干净了。您的程序中没有任何命名对象。
所以把以上所有内容铭记于心:
using pt_a_t = std::unique_ptr<A>; // Same as a typedef, but IMO more readable
pt_a_t pt_a{ new A }; // Declare an object named pt_a
pt_a->a_fun(); // Member access