【发布时间】:2023-03-31 15:10:01
【问题描述】:
我有一个 vector 的 unique_ptrs 指向一个名为 state 的类。当我用向量调用pop_back() 时,唯一指针会从内存中删除(我认为),但它指向的状态对象永远不会被删除。在删除它指向的对象时,无论是那个还是唯一指针都不会调用析构函数?我所知道的是,当我的唯一指针从向量中删除时,我的析构函数不会被调用。
这是向量:
std::vector< std::unique_ptr<State> > mStates;
我试过了:
mStates.pop_back();
这删除了唯一指针,我认为唯一指针会为我删除状态并调用状态的析构函数,但这并没有发生。顺便说一句,我使用以下方法添加元素:
mStates.push_back();
【问题讨论】:
-
请展示一些代码来证明您的问题。您肯定在滥用某些东西,但如果没有看到代码,我们无法猜测是什么。见SSCCE。
-
无法复制:ideone.com/uMRUR2
-
@SusanYanders 啊,这可能是原因。你的 State 基类必须有一个虚拟析构函数(那么你的派生类也会自动获得一个虚拟析构函数,即使你没有手动指定它)否则你不能删除派生的对象通过基类指针类。
-
任何体面的编译器都应该警告带有虚拟方法但没有虚拟析构函数的类。