【发布时间】:2018-02-07 20:51:20
【问题描述】:
可能已经有人问过这个问题,但我找不到。如果您看到了什么,请重定向我。 问题: 使用有什么好处:
myClass* pointer;
结束
myClass* pointer = new(myClass);
通过阅读其他主题,我了解到第一个选项在堆栈上分配一个空间并让指针指向它,而第二个选项在堆上分配一个空间并让指针指向它。 但是我还读到第二个选项很乏味,因为您必须使用删除来释放空间。 那么为什么要使用第二种选择。 我是菜鸟,所以请详细解释。
编辑
#include <iostream>
using namespace std;
class Dog
{
public:
void bark()
{
cout << "wouf!!!" << endl;
}
};
int main()
{
Dog* myDog = new(Dog);
myDog->bark();
delete myDog;
return 0;
}
和
#include <iostream>
using namespace std;
class Dog
{
public:
void bark()
{
cout << "wouf!!!" << endl;
}
};
int main()
{
Dog* myDog;
myDog->bark();
return 0;
}
编译并给我“wouf!!!”。那么为什么要使用“new”关键字呢?
【问题讨论】:
-
第一个选项除了指针本身不分配任何东西。该存储的位置取决于使用情况。我认为您的第一个示例中可能有一个额外的
*。 -
堆栈和堆是语言不关心的实现细节。您要问的是自动与动态存储持续时间。
-
可以给你指点书单吗:stackoverflow.com/questions/388242/…
-
栈是有限的,有时几kB,有时2-8MB,所以如果你有很大的图片,或者动态增长的列表,你可能需要使用堆。当您从函数返回时,堆栈也会消失,这对于您想要保留的东西来说是个问题。
标签: c++ class pointers dynamic-memory-allocation static-memory-allocation