2014-09-29 154 views
0

当我编写代码以在C++的免费商店中分配内存时,我很想知道如何为该数据分配指针。例如:在免费商店中分配内存

如我声明和初始化像这样一个指针,

 unsigned short int * pPointer = new unsigned short int; 
    *pPointer = value; 
    delete pPointer; 

是4个字节;使用新的关键字分配在免费商店,我可以分配一个值到该地址。但我的问题是,为什么我需要重新建立它的类型才能分配我的指针?

我想要做的事: 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()内存默认需要在新关键字后的另一种类型声明?

+2

'pPointer'是一个'int *'(指向'int'的指针)。 '&pPointer'是'pPointer'的地址,其类型为'int **'(一个指向'int'的指针),它与'int *'不同,这就是为什么你会得到这个错误。 – 2014-09-29 20:52:24

+0

我明白更清楚。谢谢您的评论。 – AllenRobins 2014-09-30 14:53:18

回答

1

但我的问题是,为什么我需要重新建立它的类型才能分配我的指针?

当您使用new进行分配时,您需要提供类型。这是因为编译器不知道你在分配什么,并且它需要这个类型,以便在给定某些信息(即有多少字节是类型,对齐等)的情况下为该特定类型建立正确的分配策略。

请注意,类型不会总是与指针相同。例如,如果您有基类B和派生类D,则可以将基类指针指派给派生类实例的地址(即B* ptr = new D)。

的Javascript会使用的方法

newMethod = new Method() 

JavaScript没有指针,new不起作用在语言一样。它只是创建给定类(函数)的新实例。

+0

我看到它的作用是因为你的评论,编译器不知道我分配的东西,就像数据需要赋予编译器正确分配数据的特定类型一样。谢谢你的帮助。 – AllenRobins 2014-09-30 14:56:55