Tkinter уничтожить и выйти зависает корневое окно на Mac

У вас есть два варианта: использование динамического хранилища или размещение нового.

Первое очевидно (как указано в комментариях, вы можете использовать unique_ptr). Если вы хотите этого избежать, вы можете попробовать разместить новое с помощью std::aligned_union в качестве хранилища:

class SomeClass { ... };

class Owner
{
public:
    Owner()
    {
        m_ptr = new(&m_storage) SomeClass();
    }

    ~Owner()
    {
         m_ptr->~SomeClass();
    } 

private:
    std::aligned_union<0, SomeClass> m_storage;
    SomeClass* m_ptr;
};

Примечание: в этом случае вы несете ответственность за вызов деструктора объект, как показано выше.

Вы можете обернуть m_ptr с помощью unique_ptr (с удаленным, который вызывает только деструктор), чтобы этого избежать:

struct DtorDeleter 
{ 
    template
    void operator ()(T* ptr) { ptr->~T(); } 
};

std::unique_ptr m_ptr; // no need to call destructor manually

0
задан sgtbp 19 January 2019 в 22:26
поделиться