Разгледайте следния код:
#include <iostream>
class Test
{
public:
constexpr Test(const int x) : _x(x) {}
constexpr int get() const {return _x;}
~Test() {} // HERE
protected:
const int _x;
};
int main()
{
static constexpr Test test(5);
return 0;
}
Ако премахна реда HERE
, кодът се компилира добре, но ако дефинирам празен деструктор, това води до грешка при компилиране, казвайки, че Test
не е литерал.
Защо и каква е разликата между празен деструктор и никакъв деструктор?
РЕДАКТИРАНЕ: Друг свързан въпрос: ако празните и литералните деструктори са различни, как да дефинирам защитен литерал деструктор?
~Test() = default;
, мисля. - person Xeo   schedule 10.01.2013protected
вместо деструктора? - person Konrad Rudolph   schedule 10.01.2013