C ++
Есть разница между
ClassType t(initialization arguments);
и
ClassType * pt;
Последний не нужно инициализировать (установить в NULL). Первый делает. Думайте об этом как о целом числе. Вы не можете иметь int без значения, НО вы можете иметь указатель int без значения.
Итак, когда у вас есть:
class ClassType
{
OtherClass value;
OtherClass * reference;
};
Тогда объявление:
ClassType object;
автоматически создает экземпляр OtherClass
в value
. Поэтому, если OtherClass
имеет инициализацию, это должно быть сделано в конструкторе ClassType
. Однако reference
является просто указателем (адресом в памяти) и может оставаться неинициализированным. Если вы хотите экземпляр OtherClass
, вы должны использовать
object.reference = new OtherClass(initialization arguments);
Java
Есть только
class ClassType
{
OtherClass reference;
}
Это эквивалентно указателю в C ++. В этом случае, когда вы делаете:
ClassType object = new ClassType();
Вы автоматически не создаете экземпляр OtherClass
. Следовательно, вам не нужно ничего инициализировать в конструкторе, если вы этого не хотите. Если вам нужен объект OtherClass
, вы можете использовать
object.reference = new OtherClass();