Объясните пожалуйста новичку: Часто видел в коде профессионалов и толковых программистов как они объявляли указатель в классе, но инициализировали его в конструкторе. Почему так? Пример:
#include "A_Class.h"
class MyClass
{
public:
MyClass();
A_Class *obj;
}
MyClass::MyClass()
{
obj = new MyClass();
}
И вот сейчас, когда писал на Qt получил ошибку и случайно её исправил. У меня был инициализирован указатель в классе, а не конструкторе. Инициализировал его в конструкторе - исправил ошибку.
Так вот, почему именно так нужно действовать? Неужели есть разница?
Дело в том, что инициализация нестатических полей класса прямо в теле класса стала доступна только начиная со стандарта C++11. Такая инициализация полезна, когда исходное значение или аргументы конструктора заранее известны. Но для инициализации нестатического поля класса может понадобится аргумент, который передается в качестве параметра в конструктор:
MyClass::MyClass(int x)
{
obj = new MyClass(x);
}
Но даже при инициализации непосредственно в теле конструктора следует по возможности использовать список инициализации (более того, это единственный способ для инициализации в конструкторе нестатических полей с const
квалификатором):
MyClass::MyClass(int x)
: obj{new MyClass{x}}
{
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как перевести из float в *char? Смотрите,мне нужно перевести из float в *char, и записать его в char vectorВектором пользоваться умею ,но не знаю как перевести...