什么时候应该在C++中使用new运算符

Rob*_*nis 2 c++ new-operator

说我有一类称为Money具有参数DollarsCents

我可以通过以下两种方式初始化它:

  1. 钱a(3,15);
  2. 钱*b =新钱(3,15);

我的问题是我应该何时使用(1)以及何时使用(2)

Jer*_*fin 8

尽可能使用1,必要时使用2."当你必须"时基本上转换为"当你创建一个生命周期不是/不能与"范围"联系在一起的对象时 - 也就是说,它必须在创建它的函数退出后保持存在.你通常想要避免这种情况,例如通过返回有问题的对象的副本,而不是在函数返回后使该对象(本身)最后.

过去,(不幸的是)没有真正的硬性和快速的指导方针可以确保你做得尽可能好.


Jor*_*dan 6

第一个Money在堆栈上创建一个对象,它的生命周期在创建它的范围内.当你点击}它时的含义超出范围并返回内存.如果要在一个函数中创建对象,请使用此选项.

第二个Money在堆上创建一个对象,它的生命周期就像你想要的那样,即直到你delete.当您希望将对象传递给不同的函数时,请使用此选项