[英]Proper way to writing constructors in C++
编辑:将我的问题更改为更有意义的内容
如果我上课:
class A{
public:
int nr;
int *a;
A();
};
A::A(): nr(0), a = new int[10]{}
这很奇怪,但是如果我有
A::A(): nr(0) {a = new int[10];}
有用。 请向我解释这种行为。
nr(0)
是数据成员nr
的初始化程序。
{a = new T[10]; }
{a = new T[10]; }
是分配一个值到数据部件构造体a
已被执行的初始化列表初始化之后 。
{}
是一个空的构造函数主体,表示构造函数不执行任何操作(当然,除了initialize nr
,因为这在初始化列表中)。
初始化列表和构造函数主体之间的a = new int[10]
是胡说八道,该语言的语法不允许这样做。 它不应该编译,但是如果您找到了接受它的编译器,然后崩溃了,则必须查看该编译器的文档以获取解释。
它看起来应该像这样:
template<class T>
class A {
public:
int nr;
T *a;
A();
};
template<class T>
A<T>::A() : nr(0), a( new T[42]) { }
都不应该编译。 正确的方法是这样的:
A::A(): nr( 0 ), a( new int[5] ){}
A<T>::A(): nr( 0 ), a( new T[10] ){}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.