编辑:改变了我的问题更有意义适当的方式在写C构造++
如果我有一个类:
class A{
public:
int nr;
int *a;
A();
};
A::A(): nr(0), a = new int[10]{}
这chrases,但如果我有
A::A(): nr(0) {a = new int[10];}
它的工作原理。请向我解释这种行为。
编辑:改变了我的问题更有意义适当的方式在写C构造++
如果我有一个类:
class A{
public:
int nr;
int *a;
A();
};
A::A(): nr(0), a = new int[10]{}
这chrases,但如果我有
A::A(): nr(0) {a = new int[10];}
它的工作原理。请向我解释这种行为。
nr(0)
是数据成员nr
的初始化。
{a = new T[10]; }
是一个构造体,其一个值分配给之后在初始化列表中的初始化已被执行的a
数据成员。
{}
是一个空的构造函数体,它意味着构造函数什么都不做(除了初始化nr
,当然,因为它在初始化列表中)。
a = new int[10]
在初始化程序列表和构造函数体之间是无稽之谈,该语言的语法不允许它。它不应该编译,但如果你发现一个编译器接受它,然后它崩溃,你将不得不看编译器的文档的解释。
也不应该编译。适当的方式将是这样:
A::A(): nr(0), a(new int[5]){}
A<T>::A(): nr(0), a(new T[10]){}
为'a'分配多少内存? –
doh坏复制和粘贴。现在修好 –
它应该是这个样子:
template<class T>
class A {
public:
int nr;
T *a;
A();
};
template<class T>
A<T>::A() : nr(0), a(new T[42]) { }
既不应该工作。 –
请解释投票。 – coredump