我想知道这两个构造函数之间有什么区别:
List<type*> list = List<type*>();
和
List<type*> list;
容器 List 是我编写的,它有一个不带参数的用户定义构造函数。
在我看来,第一行是正确的,第二行看起来像Java。但是,两者都编译。那么,这两个陈述之间有什么区别?
答案 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();
}
因为复制构造函数是不可访问的,否则复制操作可能会被省略。
同样使用第一个提供相应的对象将被初始化,而使用第二个提供相应的对象将被默认初始化。