当我在 C++ 中编写代码以在自由存储上分配内存时,我对分配指向该数据的指针感到好奇。例如:
当我像这样声明和初始化一个指针时,
unsigned short int * pPointer = new unsigned short int;
*pPointer = value;
delete pPointer;
为4个字节;使用 new 关键字在免费商店上分配,我可以为该地址分配一个值。但我的问题是,为什么我需要重新建立它的类型才能分配我的指针?
我想做的是:
unsigned short int * pPointer = new pPointer
容易吗?
Javascript 会使用一个方法
newMethod = new Method()
在方法中访问成员数据。
但我知道指针是如何使用的。
pPointer = member data address and *pPointer = member data value
每次我尝试类似的东西时,
int * pLocal = &pPointer
抛出一个错误。无法将 int** 转换为 int* 正在尝试保留相同的内存空间,这就是为什么我不能将其地址存储在另一个指针中,它只是保留的内存。
抱歉,如果这令人困惑,但我只是想知道如何在自由存储上分配内存并使用指针访问它已经具有 sizeof() 内存默认值的类型需要在 new 关键字之后的另一个类型声明?
最佳答案
But my question is, why do I need to reestablish it's type in order to assign my pointer?
当您使用 new
进行分配时,您需要提供类型。这是因为编译器不知道你在分配什么,它需要类型才能在给定特定信息(即类型、对齐方式等)的情况下为特定类型建立正确的分配策略。
请注意,类型并不总是与指针相同。例如,如果您有一个基类 B
和一个派生类 D
,您可以将基类指针分配给派生类实例的地址(即 B* ptr = new D
).
Javascript would use a method
newMethod = new Method()
JavaScript 没有指针,new
在该语言中的工作方式也不同。它只是创建给定类(函数)的新实例。
关于c++ - 在空闲存储上分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108635/