gpt4 book ai didi

c++ - 指针的默认析构函数?

转载 作者:行者123 更新时间:2023-11-30 01:49:47 33 4
gpt4 key购买 nike

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

 ~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<vector*> myVec ,析构函数中的代码会正确执行吗?具体来说,将 front[i].~T();正确调用vector类的析构函数?

最佳答案

TLDR:您的代码没问题。

长答案:是和否。

front[i].~T()将“正确调用指针的析构函数*”。然而,指针的“析构函数”什么都不做。所以这段代码正确地什么都不做。

如果您想释放指针指向的东西,那是完全不同的事情。在这种情况下最简单的做法是改用 vector<std::unique_ptr<int>>或其他任何东西,以便此析构函数将调用 unique_ptr 的析构函数,那些析构函数释放内存。

请注意,几乎每个顺序容器都试图从后到前销毁元素,而不是按照您拥有的方式。有些类可能对构建/销毁顺序有点挑剔。

* 内置类型技术上没有像析构函数这样的成员,但您可以假装它们具有所有意图和目的,只是您不能按名称引用它们。支持>

关于c++ - 指针的默认析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28421716/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com