Деструкторы встроенных типов (интервал, символ и т.д.)

59
задан Ayxan 4 August 2019 в 10:00
поделиться

1 ответ

Это - причина, которая заставляет Ваш код работать на универсальные параметры. Рассмотрите контейнер C:

template<typename T>
struct C {
    // ...
    ~C() {
        for(size_t i = 0; i<elements; i++)
            buffer[i].~T();
    }
};

Это было бы раздражающим для представления особых случаев для встроенных типов. Таким образом, C++ позволяет Вам делать вышеупомянутое, даже если T, оказывается, равняется int. В святом Стандарте говорится в 12.4 p15:

нотация для явного вызова деструктора может использоваться для любого скалярного имени типа. Разрешение этого позволяет записать код, не имея необходимость знать, существует ли деструктор для данного типа.

различие между использованием простого интервала и typedef'ed интервалом - то, что они - синтаксически разные вещи. Правило, что в вызове деструктора, вещью после эти ~ является имя типа. int не такая вещь, но имя определения типа. Ищите его в 7.1.5.2.

92
ответ дан Johannes Schaub - litb 24 November 2019 в 18:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: