这些构造函数之间有什么区别?

时间:2016-02-17 10:40:03

标签: c++ constructor difference

我想知道这两个构造函数之间有什么区别:

List<type*> list = List<type*>();

List<type*> list;

容器 List 是我编写的,它有一个不带参数的用户定义构造函数。

在我看来,第一行是正确的,第二行看起来像Java。但是,两者都编译。那么,这两个陈述之间有什么区别?

1 个答案:

答案 0 :(得分:4)

第一个需要可访问的副本或移动构造函数,而第二个不需要。

考虑一下这个恶魔计划。如果您不使用MS VC ++,则程序不能编译。:)

#include <iostream>

class A
{
public:    
    A() {}
private:    
    A( const A& ) { std::cout << "A( const A & )" << std::endl; }
};              

int main()
{
    A a = A();
}

因为复制构造函数是不可访问的,否则复制操作可能会被省略。

同样使用第一个提供相应的对象将被初始化,而使用第二个提供相应的对象将被默认初始化。