Дублируется ли объектный код шаблонов C++ в исполняемых файлах и динамических библиотеках?

Библиотека использует шаблонный класс TemplCls<TArg>и связанный исполняемый файл также использует его. Теперь, если два исходных файла одного и того же конечного двоичного файла (библиотека или исполняемый файл) используют шаблон с одним и тем же параметром, то будет сохранен только один экземпляр шаблона.

Что произойдет, если динамическая библиотека и исполняемый файл используют шаблон? Поскольку компоновщик исполняемого файла (как правило) получит параметр терминала для связи с динамической библиотекой, он также будет учитывать, что шаблон уже был создан в самой библиотеке, и, следовательно, нет необходимости создавать его экземпляр в исполняемом файле.?

1 ответ

Решение

Что произойдет, если динамическая библиотека и исполняемый файл используют шаблон?

Каждый получит копию каждого шаблона, который используется.

Вам не нужно задавать этот вопрос, вы можете просто посмотреть (в разархивированных двоичных файлах):

nm -AC a.out foo.so | grep TemplCls
Другие вопросы по тегам