Kel*_*ang 5 c++ memory-management vector
为了练习,我正在尝试实现自己的std :: vector.当前源代码:http://pastebin.com/bE4kjzcb
这是我班级的概要:
Array() 使用分配一些内存 malloc()push_back(const T &t)添加一个元素,realloc()必要时调用.~Array()打电话free()给释放记忆.这个模型的主要问题是,free()回收内存,但它不会调用T析构函数(何时T是类而不是标准数据类型).
当向量内的元素是对象时,这可能导致严重的资源泄漏.我解决这个问题的方法是,在内存之前调用~T() EXPLICITLYfree().
我正在使用的原因malloc()是,我正在努力利用realloc().如果我使用new和delete,重新分配时内存使用率将达到峰值.(新缓冲区和旧缓冲区都存在的时刻.)
问:这是一个糟糕的设计吗?怎么std::vector解决这个问题?我的矢量类中还有其他缺陷吗?
PS:我们暂不谈malloc()现在的多线程表现.
呼唤~T()是究竟是如何std::vector处理的问题.
但是你有几个问题:
首先,push_back需要使用placement new来将值复制 - 构造到向量中.你不能只使用作业.
其次,你不能调用realloc- 如果对象有内部指针,它们将最终指向自己的外部.您必须malloc再次调用,然后使用placement new来复制构造值,然后显式删除所有旧值,然后调用free以释放旧值.
(实际上,std::vector它不会调用~T()自身.相反,它会调用负责... 分配和释放内存的分配器.但在内部,这就是通用分配器的工作方式.)