自定义STL向量的销毁

时间:2016-08-17 15:29:14

标签: c++ vector stl allocator

我已经在SO上阅读了相当多的参考资料和一些帖子,但似乎无法弄清楚如何“覆盖”destroy的{​​{1}}结构。此结构vector包含我需要调用Package的{​​{1}}类型的成员。我已经有一个内联的帮助函数来传递这个BSTR类型,但我需要调用它。

我的矢量声明为:

SysFreeString

我已经尝试了许多基于读取和示例的方法,并且最新的代码在VC ++编译器中出错:

  

'const _Package * std :: _ Wrap_alloc :: address(const _Package&)const':无法将参数1从'std :: _ Container_proxy'转换为'_Package&'

我的分配器是一个专门化,如下所述。我承认,虽然我经常使用STL,但分配器并不是我经常使用的东西。

Package

我希望根据我在cppreference.com上阅读的内容以及此处的一些讨论,虽然大多数主题都在自定义vector<Package, PackageAlloc> packages; struct PackageAlloc : public allocator<Package> { template <class U> void destroy(Package* p) { ReleasePackage(p); } template <class U> struct rebind { typedef PackageAlloc other; }; }; ,但这可行。那些必须安装吗?我一直在阅读有关allocate的内容,但看不到它甚至被我的MSVCRT 14.0标头用于向量。

更重要的是,我真的在寻找一个工作示例,说明我将如何自定义deallocate或我的实现缺失,这意味着我的allocator_traits未被调用(即它编译但是调试没有中断)或MSVC错误的原因。我不需要重写内存分配;我只是想确保向量中的元素被正确销毁。

编辑:值得注意的是,我所拥有的Win32风格的COM方法“返回”destroy结构数组,遵循我们代码库中类似方法的约定,因为我们的直接合作伙伴不想处理destroy,并且从Package样式的枚举器中分配新对象效率非常低(即这些是轻量级对象)。因此,虽然释放留给调用者,但我正在尝试提供辅助函数和样本(例如此SAFEARRAY实现),以便更轻松地处理潜在的内存泄漏。

0 个答案:

没有答案
相关问题