Тема: Типи і вказівники

Всім привіт.
Дано наступний код:

struct Node
    {
        T data;
        Node* next;
        Node* prev;
        Node() { data = T{} ; next = nullptr; prev = nullptr;
       ~Node() {  delete data; }
    };

Що можна зробити щоб в деструкторі код delete data виконувався лише тоді,коли тип Т є вказівником?

2 Востаннє редагувалося wander (17.07.2022 14:58:45)

Re: Типи і вказівники

Олександр Ковальчук написав:

Всім привіт.
Що можна зробити щоб в деструкторі код delete data виконувався лише тоді,коли тип Т є вказівником?

Та, багато чого можна зробити. Якщо Т це шаблонний тип, а сам шаблон класу Node може мати різну поведінку, в залежності від того чи Т вказівник, чи ні, то можна зробити часткову спеціалізацію.

template <typename T>
struct Node {
    T data;
    // ...
    ~Node() { /* empty */ }
};

template <typename T>
struct Node<T*> { // partial specialization for T*
    T* data;
    // ...
    ~Node() { delete data; }
};

Ще можна вліпити static_assert, якщо без спеціалізації. А, якщо це не шаблон, то ви і так знаєте тип.

Re: Типи і вказівники

Дякую .
Варіант з частковою спеціалізацією більш ніж підходить.
Йду займатись своїми прогалинами в знаннях шаблонів...:)