我使用地图来存储一对(int和类)使用以下内容:
#include <iostream>
#include <utility>
#include <map>
using namespace std;
class abstractclass{...};
class derivedclass : public abstractclass{...};
typedef map<int,abstractclass*> dBase;
int main(){
dBase db;
db.insert(pair<int,abstractclass*>(123,new derivedclass));
db.insert(pair<int,abstractclass*>(124,new derivedclass));
}
Run Code Online (Sandbox Code Playgroud)
我如何删除分配给它的内存?我需要能够使用insert用户定义的次数,因此可以删除每个数据库条目的方法,谢谢!
如果有一种方法,我可以做到这一点,而不使用也很有用的内存分配
sya*_*yam 10
由于你的类层次结构,你显然不能只是abstractclass按值存储你的对象,map或者你遇到臭名昭着的对象切片问题.
解决此问题的常用方法是使用智能指针,例如.std::unique_ptr或者std::shared_ptr(C++ 11,C++ 03都没有 std::auto_ptr在容器中使用,因为它已经坏了,但你可以安全地使用boost智能指针).
所以你的map类型会变成例如.std::map<int, std::unique_ptr<abstractclass>>.然后,您不再需要打扰删除对象,当它们从地图中删除时,智能指针将自动处理它.
另一个解决方案是自己的delete所有项目(如@MarkB所说),但这非常容易出错,因此在可能的情况下通常首选智能指针.