Что (не) делать в конструкторе - PullRequest
40 голосов
/ 11 октября 2010

Я хочу спросить вас о ваших лучших практиках относительно конструкторов в C ++.Я не совсем уверен, что я должен делать в конструкторе, а что нет.

Должен ли я использовать его только для инициализации атрибутов, вызова родительских конструкторов и т. Д.?Или я мог бы даже поместить в них более сложные функции, такие как чтение и анализ данных конфигурации, настройку внешних библиотек aso

, или я должен написать специальные функции для этого?Соответственноinit() / cleanup()?

Что здесь за и против?

Я уже понял, что, например, я могу избавиться от общих указателей при использовании init() и cleanup().Я могу создать объекты в стеке как атрибуты класса и инициализировать его позже, когда он уже создан.

Если я обрабатываю его в конструкторе, мне нужно создать его экземпляр во время выполнения.Тогда мне нужен указатель.

Я действительно не знаю, как решить.

Может быть, вы можете мне помочь?

Ответы [ 13 ]

2 голосов
/ 11 октября 2010

Ну, «конструктор» происходит от строительства, строительства, наладки. Так что там, где происходит вся инициализация. Каждый раз, когда вы создаете экземпляр класса, используйте конструктор, чтобы убедиться, что все сделано для того, чтобы новый объект работал с.

1 голос
/ 21 января 2019

В идеале, у вас не должно быть кода в ваших конструкторах, никогда (кроме присвоения атрибута).Есть одна важная причина: она предотвращает компоновку объектов и делает их нерасширяемыми.

Вот мой пост в блоге об этом: Конструкторы должны быть свободны от кода

1 голос
/ 11 октября 2010

Вы можете делать то, что хотите, но использовать конструктор для этой цели, так как он называется - создать объект.и если для этого нужно вызывать другие методы, это нормально.просто следуйте одному правилу - не делайте его сложнее, чем нужно.Хорошей практикой является сделать конструктор максимально простым, но это не означает, что вам нужно просто инициализировать элементы.

...