Был с ++ код, который выглядел что-то вроде этого in a tutorial video (номера строк добавлены для ясности):Сколько экземпляров объектов создается здесь?
1. Config defaultConfig("/etc/foobar/config");
2. Config userConfig("~/.config/foobar/config");
3. Config conf;
4. /* Do something else not involving `conf` */
5. conf = defaultConfig.join(userConfig);
Мой вопрос, сколько экземпляров Config
класса создаются?
В этом случае функция join
возвращает новый экземпляр Config
, а не модифицирует существующий, поэтому создается не менее 3 объектов.
Мой вопрос о третьей строке (Config conf;
). C++ автоматически создает экземпляр Config
на этой строке (хотя на другом языке, таком как Java, вам придется вручную указать ему, чтобы назначить new Config()
)? Или компилятор c++
достаточно умен, чтобы понять, что объект conf
никогда не доступен, но вместо этого заменяется на строке # 5?
Сколько выделено памяти? Достаточно для трех ссылок и четырех экземпляров Config
, или там больше происходит за кулисами?
Ответ не может быть определен кодом, который вы опубликовали. Это особенно важно из-за строки 5. Мы не знаем, как объявляется «join», если он принимает значение «Config» по значению или нет. Мы не знаем, будет ли компилятор оптимизировать копии и т. Д. И т. Д. – PaulMcKenzie