对象和对象指针之间的主要区别?

RoR*_*RoR 4 c++

做的有什么区别,

EventList temp;

EventList* temp = new EventList();
Run Code Online (Sandbox Code Playgroud)

现在临时你通过使用. 而访问它的变量,而另一个是->

除了这个差异,还有什么?只是EventList在堆栈上时,指针在堆上分配.它主要是范围的东西吗?

Gai*_*aim 6

有简短的总结

堆栈上的对象 EventList temp;

  • 访问速度稍微快一些,没有反射功能
  • 在创建它们的方法结束时会自动删除对象,因此我们不必关心它们的删除
  • 堆栈大小有限(远远超过堆)
  • 如果没有复制,则无法从方法返回这些对象

堆上的对象 EventList* temp = new EventList();

  • 堆是"无限的"(与堆栈相比)
  • 这些对象易于在整个应用程序中共享,因为它们不会被自动检测
  • 我们必须手动删除它们,如果我们松开指针然后内存中丢失了字节(泄漏)


Lan*_*opp 4

Eventlist temp在调用它的范围内自动分配和释放。也就是说,当您运行以下代码时:

{
    EventList temp;
}
Run Code Online (Sandbox Code Playgroud)

for 的默认构造函数EventList在声明时调用,析构函数在块末尾调用。

EventList *temp = new EventList();分配在堆上。你可以在这里读更多关于它的内容。

  • 不,“EventList temp”并不*总是*在堆栈上分配。考虑这样的情况:它是已在堆上分配的对象的成员变量。 (3认同)