我编写了一些简单的接口,我想创建一个包含实现接口的类对象的全局向量。 所以我做了以下事情:
vector<SomeInterface*> ary;
我注释掉除之外的整个代码:void main()和vector ary; 现在使用_CrtDumpMemoryLeaks();在Visual Studio 2010中,我泄漏了1个块。
如何解决?
问候。
答案 0 :(得分:5)
您需要删除已分配的内存。 您有两种选择:
for (auto *p : ary) delete p;
或
vector<std::unique_ptr<SomeInterface>> ary;
第二个更安全,因为它会在你摧毁矢量时自动释放内存。
答案 1 :(得分:1)
vector
不是泄漏的原因,我可以保证这么多。您正在向量中存储SomeInterface*
s。我假设您分配了这些(new SomeInterface(...)
)并且不在任何地方删除它们。我建议你使用智能指针:
std::vector<std::unique_ptr<SomeInterface>> ary;
如果您无法执行此操作,则需要在使用后删除分配...
for(SomeInterface* i : ary)
delete i;