Нет ответа на javascript

Существует много отличных ответов на этот вопрос, в том числе важные варианты использования форвардных деклараций, полиморфизм и т. д., но я чувствую, что часть «души» вашего вопроса не отвечает - а именно, что означают разные синтаксисы для Java и C ++.

Давайте рассмотрим ситуацию, сравнивающую два языка:

Java:

Object object1 = new Object(); //A new object is allocated by Java
Object object2 = new Object(); //Another new object is allocated by Java

object1 = object2; 
//object1 now points to the object originally allocated for object2
//The object originally allocated for object1 is now "dead" - nothing points to it, so it
//will be reclaimed by the Garbage Collector.
//If either object1 or object2 is changed, the change will be reflected to the other

Ближайшим эквивалентом этого является:

C ++:

Object * object1 = new Object(); //A new object is allocated on the heap
Object * object2 = new Object(); //Another new object is allocated on the heap
delete object1;
//Since C++ does not have a garbage collector, if we don't do that, the next line would 
//cause a "memory leak", i.e. a piece of claimed memory that the app cannot use 
//and that we have no way to reclaim...

object1 = object2; //Same as Java, object1 points to object2.

Давайте посмотрим альтернативный способ C ++:

Object object1; //A new object is allocated on the STACK
Object object2; //Another new object is allocated on the STACK
object1 = object2;//!!!! This is different! The CONTENTS of object2 are COPIED onto object1,
//using the "copy assignment operator", the definition of operator =.
//But, the two objects are still different. Change one, the other remains unchanged.
//Also, the objects get automatically destroyed once the function returns...

Лучший способ подумать о том, что - более или менее - Java (неявно ) обрабатывает указатели на объекты, а C ++ может обрабатывать либо указатели на объекты, либо сами объекты. Есть исключения из этого - например, если вы объявляете «примитивные» типы Java, это фактические значения, которые копируются, а не указатели. Итак,

Java:

int object1; //An integer is allocated on the stack.
int object2; //Another integer is allocated on the stack.
object1 = object2; //The value of object2 is copied to object1.

При этом использование указателей НЕ обязательно является правильным или неправильным способом обработки вещей; однако другие ответы покрывали это удовлетворительно. Общая идея заключается в том, что в C ++ у вас гораздо больше контроля над временем жизни объектов и от того, где они будут жить.

Возьмите домашнюю точку - конструкция Object * object = new Object() на самом деле является тем, что ближе всего к типичная семантика Java (или C #).

0
задан Federico klez Culloca 13 July 2018 в 08:34
поделиться

1 ответ

Здесь вы должны добавить style:

document.getElementById("big").style.display="none";
4
ответ дан Federico klez Culloca 17 August 2018 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: