【问题标题】:What is the difference between creating a class object using the new command and not?使用 new 命令创建类对象与不创建类对象有什么区别?
【发布时间】:2014-09-29 22:15:28
【问题描述】:

我正在尝试通过用 C++ 制作一个简单的棋盘游戏来学习课程。我有一个名为“board”的类,它有两个函数,drawBoard 和 fillBoard。 当我在我的主函数中创建对象时,我似乎有两个选择。

1) 棋盘游戏;

2) 棋盘* 游戏板 = 新棋盘();

这两者有什么区别?使用“new”运算符时,我是否总是需要创建一个指针?我主要是想了解我会在什么情况下使用其中一种。

另外,当我将它定义为指针时,调用函数时是否总是必须使用“->”而不是点?

board.drawBoard();与 board->drawBoard();

这两者有什么不同?

【问题讨论】:

标签: c++ class pointers


【解决方案1】:

1) 棋盘游戏;

这个是在栈上创建的

2) 棋盘* 游戏板 = 新棋盘();

这个是在堆上创建的。

使用'new'时我是否总是需要创建一个指针

是的。

在调用函数时我是否总是必须使用“->”而不是点

-> 运算符只是 (*board).drawBoard() 的快捷方式。 指针是保存其他变量地址的变量,如果要访问指针指向的变量,请使用星号。括号是因为运算符优先级

【讨论】:

  • 您希望 OP 知道堆栈和堆是什么?
  • 感谢您的回复。您为我指明了正确的方向,以了解后台实际发生的情况。我阅读了有关堆栈和堆的信息,现在有一个不相关的问题:由于您不断释放堆中的内存,它会变得非常碎片化吗?碎片化甚至会像使用硬盘驱动器那样减慢 RAM 的速度吗?如果是这样,是否有一些东西会定期对堆进行碎片整理?
  • 不正确。 board gameBoard; 取决于它的定义位置。在函数之外时,它将自动或全局存储,通常不在堆栈中。
  • @ThomasMatthews automatic 仅在它位于函数内部时。函数之外是静态存储。
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 2017-05-12
  • 1970-01-01
相关资源
最近更新 更多