Использование только одного экземпляра шаблона класса все еще вызывает вздутие кода? - PullRequest
0 голосов
/ 25 апреля 2020

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

#include <array>

template <int N>
class Example {
public:
    std::array<int, N> parameter;

    Example(std::array<int, N> value){
        parameter = value;
    };

    ~Example(){};
};

int main()
{
    std::array<int, 3> simple = {1, 2, 3};
    Example<3> * primitive = new Example<3>(simple);

    for(int i=0; i<100; ++i){
        new Example<3>(*primitive);
    }

    // Leak everything
    return 0;
}

1 Ответ

0 голосов
/ 25 апреля 2020

Скорее всего, компилятор встроит код конструктора в каждую из двух точек использования. Но это не вздутие живота. Вы будете иметь ту же ситуацию, используя не шаблонный класс с жестко закодированным N. Если вы хотите сохранить пространство кода, вы можете использовать расширение языка, поддерживаемое компилятором, чтобы отключить встраивание конструктора.

...