sta*_*tti 2 c++ oop stack memory-management
我喜欢在堆栈上声明变量,尤其是在使用标准容器时.每次避免使用时new,都可以避免潜在的内存泄漏.
我也喜欢使用多态,即使用虚函数的类层次结构.但是,似乎这些功能有点不兼容:你做不到:
std::vector<BaseType> vec;
vec.push_back(DerivedType())
Run Code Online (Sandbox Code Playgroud)
或者至少看起来你会失去你所推入的对象的多态性.
那么,有没有办法协调基于堆栈的内存管理和虚拟功能的使用?
那个明显的答案是:
std::vector<BaseType*> vec;
DerivedType d;
vec.push_back(&d);
Run Code Online (Sandbox Code Playgroud)
但可能不是你想要的.d并且vec最好同时死去; 如果vec超过d你有一个坏指针.
我认为你真正想要的是Boost 指针容器:
boost::ptr_vector<BaseType> vec;
vec.push_back(new DerivedType());
Run Code Online (Sandbox Code Playgroud)
所以你不必担心泄漏.指针容器专门用于简化多态对象的使用和存储的任务.