为什么可以从const引用中调用析构函数?

时间:2018-03-10 11:31:36

标签: c++ const destructor

玩完放置/删除后,我想出了这段代码,对我来说,编译和运行(至少在gcc和clang上):

int main()
{
    struct A{};
    A a;
    const A& b = a;
    b.~A();
}

我测试了更复杂的版本,例如A的析构函数调用非const限定的成员。 这种能力是否有充分的理由从const引用中调用析构函数?

1 个答案:

答案 0 :(得分:0)

析构函数总是隐式const。您可以通过常量指针和引用删除对象。从C ++ 11开始,您还可以通过常量迭代器擦除容器元素。

const A* a = new A();
delete a; // OK. Deletes pointed const object, implicitly calls destructor.