指针的默认析构函数?

时间:2015-02-09 23:51:44

标签: c++ pointers destructor

假设我有一个自定义的向量类,向量类的析构函数定义如下,

 ~vector(void) {
        for (uint64_t i = 0; i<len_elem; i++) { //destruct each elem
                front[i].~T();
        }
        ::operator delete(head);
        head = nullptr;
        capacity = 0;
 }

根据我的理解,这个析构函数适用于大多数情况。但是,如果向量是vector<vector*> myVec,析构函数中的代码是否会正确执行?具体来说,front[i].~T();是否会正确调用向量类的析构函数?

1 个答案:

答案 0 :(得分:4)

TLDR:您的代码没问题。

答案很长:是的,不是。

front[i].~T()将&#34;正确地调用析构函数以获取指针*&#34;。然而,一个指针&#34;析构函数&#34;什么都不做。所以这段代码正确什么都不做。

如果你想免费指针指向的东西,这是一个完全不同的东西。在这种情况下最简单的方法是使用vector<std::unique_ptr<int>>或其他任何东西,以便这个析构函数将调用unique_ptr的析构函数,并且那些析构函数释放内存。

作为一个注释,几乎每个顺序容器都试图从后到前破坏元素而不是你拥有它的方式。有些类可能对构造/销毁顺序有点挑剔。

*内置类型不是技术上有成员像析构函数,但你可以假装它们的目的是为了所有意图和目的,除了你不能通过以下方式引用它们名称