Инициализация указателя

194
01 июня 2018, 00:30

Объясните пожалуйста новичку: Часто видел в коде профессионалов и толковых программистов как они объявляли указатель в классе, но инициализировали его в конструкторе. Почему так? Пример:

#include "A_Class.h"
class MyClass
{
public:
    MyClass();
    A_Class *obj;
}
MyClass::MyClass()
{
    obj = new MyClass();
}

И вот сейчас, когда писал на Qt получил ошибку и случайно её исправил. У меня был инициализирован указатель в классе, а не конструкторе. Инициализировал его в конструкторе - исправил ошибку.

Так вот, почему именно так нужно действовать? Неужели есть разница?

Answer 1

Дело в том, что инициализация нестатических полей класса прямо в теле класса стала доступна только начиная со стандарта C++11. Такая инициализация полезна, когда исходное значение или аргументы конструктора заранее известны. Но для инициализации нестатического поля класса может понадобится аргумент, который передается в качестве параметра в конструктор:

MyClass::MyClass(int x)
{
    obj = new MyClass(x);
}

Но даже при инициализации непосредственно в теле конструктора следует по возможности использовать список инициализации (более того, это единственный способ для инициализации в конструкторе нестатических полей с const квалификатором):

MyClass::MyClass(int x)
: obj{new MyClass{x}}
{
}
READ ALSO
Перевод из float в *char [закрыт]

Перевод из float в *char [закрыт]

Как перевести из float в *char? Смотрите,мне нужно перевести из float в *char, и записать его в char vectorВектором пользоваться умею ,но не знаю как перевести...

213
Как подключить шифрование?

Как подключить шифрование?

Есть программа на шарпах:

185
Стили для дочерних элементов

Стили для дочерних элементов

Допустим у нас есть два div-а

214