выделение памяти в свободном хранилище

Когда я пишу код для выделения памяти в свободном хранилище на С ++, мне было любопытно назначить указатель на эти данные. Например:

поскольку я объявляю и инициализирую указатель таким образом,

     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 () по умолчанию для памяти требуется другое объявление типа после нового ключевого слова?


person AllenRobins    schedule 29.09.2014    source источник
comment
pPointer - это int* (указатель на int). &pPointer является адресом pPointer и имеет тип int** (указатель на указатель на int), который не совпадает с int*, поэтому вы получаете эту ошибку.   -  person Colonel Thirty Two    schedule 30.09.2014
comment
Я понимаю более четко. Спасибо за ваш комментарий.   -  person AllenRobins    schedule 30.09.2014


Ответы (1)


Но у меня вопрос: зачем мне восстанавливать его тип, чтобы назначить указатель?

Когда вы выделяете new, вам необходимо указать тип. Это связано с тем, что компилятор не знает, что вы выделяете, и ему нужен тип, чтобы установить правильную стратегию распределения для этого конкретного типа с учетом определенной информации (например, сколько байтов имеет тип, выравнивание и т. Д.).

Обратите внимание, что тип не всегда будет таким же, как указатель. Например, если у вас есть базовый класс B и производный класс D, вы можете назначить указатель базового класса на адрес экземпляра производного класса (то есть B* ptr = new D).

Javascript будет использовать метод

newMethod = new Method()

В JavaScript нет указателей, и new на этом языке работает иначе. Он просто создает новый экземпляр данного класса (функции).

person 0x499602D2    schedule 29.09.2014
comment
Я вижу, что он делает, из-за вашего комментария о том, что компилятор не знает, что я выделяю, например, конкретный тип, который данные должны передать компилятору для правильного распределения данных. Спасибо, это помогает. - person AllenRobins; 30.09.2014