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

C++ shared_ptr copy constructor syntax

本文关键字:构造函数 语法 复制 ptr shared c++      更新时间:2023-10-16

我有下面的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& 
}

你的复制构造函数不正确,它应该是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();
}

A(const &A);错误。有两种正确的等价形式。这些都是

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