C++开发初级


833 浏览 5 years, 3 months

3.1.2 使用构造函数

版权声明: 转载请注明出处 http://www.codingsoho.com/
使用构造函数

构造函数用来创建对象并初始化值。在基于堆栈以及基于堆的分配时都可以使用构造函数。

在堆栈中使用构造函数

当在堆栈中分配SpreadsheetCell对象时,可以这样使用构造函数:

  SpreadsheetCell myCell(5), anotherCell(4);

  cout << "cell 1: " << myCell.getValue() << endl;
  cout << "cell 2: " << anotherCell.getValue() << endl;

代码取自 SpreadsheetCellCtors\SpreadsheetCellTest.cpp

注意,不要显式地调用SpreadsheetCell构造函数。例如,不要采用下面的做法:

  SpreadsheetCell myCell.SpreadsheetCell(5); //Compile KO

同样在声明之后也不能调用构造函数。下面的代码也是不正确的:

  SpreadsheetCell myCell;
  myCell.SpreadsheetCell(5); //Compile KO

在堆栈中使用构造函数的唯一正确的方法是:

  SpreadsheetCell myCell(5);
在堆中使用构造函数

当动态分配SpreadsheetCell对象时,可这样使用构造函数:

  SpreadsheetCell* myCellp = new SpreadsheetCell(5);
  SpreadsheetCell* anotherCellp = nullptr;
  anotherCellp = new SpreadsheetCell(4);
  // ... do something with the cells
  delete myCellp;
  myCellp = nullptr;
  delete anotherCellp;
  anotherCellp = nullptr;

代码取自 SpreadsheetCellCtors\SpreadsheetCellTest.cpp

注意可以声明一个指向SpreadsheetCell对象的指针而不立即调用构造函数,这一点与堆栈中的对象不同,在那里声明的时候会调用构造函数。

无论在堆栈中还是在类中声明指针,都应该像前面声明anotherCellp那样将其初始化为nullptr。如果不赋予nullptr值,指针就是未定义的。意外地使用未定义指针可能会导致无法预料的或者难以察觉的内存问题。如果您将指针初始化为nullptr,在大多数操作环境下使用这个指针都会引起内存访问错误而不是难以预料的结果。

同样,记得对使用new动态分配的对象使用delete,或者使用智能指针。