C ++ shared_ptr复制构造函数语法

时间:2011-11-20 14:05:55

标签: c++ syntax reference shared-ptr copy-constructor

我有以下C ++代码,我正在尝试编译(相关部分如下)。我无法理解我的语法有什么问题。

我收到错误

C2664: A(const A&) : cannot convert parameter 1 from A *const to const A&

据我了解,*b.getA()应该取消引用指针,给我实际的对象,然后我可以用复制构造函数复制它。

class A: {
    public:
        A(const &A);
        A();
};

class B: {
    private:
        shared_ptr<A> myA;
    public:
        B() { myA = make_shared<A>(A()); }
        shared_ptr<A> getA() { return myA; }
};

main() {
    B b; // default constructor of B
    A a = *b.getA(); //try invoke copy constructor from A
    // Throws error C2664: A(const A&) : cannot convert parameter 1 from A *const to const A& 
}

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您的复制构造函数不正确,应该是A(const A&)而不是A(const &A)

编译好:

class A {
    public:
        A(const A&){}
        A(){}
};

class B {
    private:
        shared_ptr<A> myA;
    public:
        B() { myA = make_shared<A>(); }
        shared_ptr<A> getA() { return myA; }
};

main() {
    B b; // default constructor of B
    A a = *b.getA();
}

答案 1 :(得分:0)

A(const &A);错了。有两种正确和等效的形式。这些是

A(const A & /*name*/);
A(A const & /*name*/);