没有复制构造函数的C ++对象数组初始化

时间:2018-04-18 06:52:46

标签: c++

我有以下课程:

class A  
{  
public:  
    A(int i)  
        :m_n{i}  
    {
        std::cout << "A(int)\n";
    }
    // I don't need copy constructor.
    A(const A&) = delete;

private:
    int m_n;
};

然后我宣布了一个A:

的数组
int main()
{
    A aa[] {1, 2, 3};

    return 0;
}

当我尝试在OnlineGDB上编译程序时 (https://www.onlinegdb.com/online_c++_compiler)使用C ++ 14,我得到了 以下错误:

main.cpp: In function 'int main()':  
main.cpp:38:20: error: use of deleted function 'A::A(const A&)'  
     A aa[] {1, 2, 3};  
                    ^  
main.cpp:22:5: note: declared here
     A(const A&) = delete;
     ^
main.cpp:16:5: note:   after user-defined conversion: A::A(int)
     A(int i)
     ^

然后我将复制构造函数添加到A类:

A(const A& a)
    :m_n{a.m_n}
{
    std::cout << "A(const A&)\n"
}

并编译程序并输出以下内容:

A::A(int)
A::A(int)

我的问题:
由于从未调用过复制构造函数,为什么要定义它呢?

0 个答案:

没有答案