c ++ auto_pointer不访问类成员函数

时间:2017-12-13 07:10:20

标签: c++ c++11

这里我想使用自动指针访问类成员函数。最初我输入自动指针然后使用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;
}

1 个答案:

答案 0 :(得分:4)

几点:

  1. 您标记了C ++ 11,因此请勿使用std::auto_ptr。它在2011年被弃用,并在2017年被淘汰。

  2. typedef ... pt_a;使pt_a成为一种类型。因此pt_a->a_fun()将是不正确的。您不能在类型上使用成员访问权限,而是需要一个对象。

  3. pt_a(new A);会创建一个对象。临时对象。它立即被清理干净了。您的程序中没有任何命名对象。

  4. 所以把以上所有内容铭记于心:

    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