繁体   English   中英

用C ++编写构造函数的正确方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM