防止在随后的allocator.allocate...语句中发生内存泄漏

问题描述

请看看以下课程:

template<typename A,typename B,typename AllocA = std::allocator<A>,typename AllocB = std::allocator<B>>
class cls {
public:
    cls(size_t size) :
        size{ size },a{ alloc_a.allocate(size) },b1{ alloc_b.allocate(size) },b2{ alloc_b.allocate(size) }
    {}

    void reallocate() {
        alloc_a.deallocate(a,size);
        alloc_b.deallocate(b1,size);
        alloc_b.deallocate(b2,size);

        a = alloc_a.deallocate(size);
        b1 = alloc_b.deallocate(size);
        b2 = alloc_b.deallocate(size);
    }

    ~cls() {
        alloc_a.deallocate(a,size);
    }

private:
    size_t size;

    AllocA alloc_a;
    AllocB alloc_b;

    A* a;
    B* b1;
    B* b2;
};

我想以某种方式重写此类,以在某些分配器的allocatedeallocate方法引发异常时正确地防止内存泄漏。我知道std::unique_ptr以及一般来说RAII的概念。但是,我

  1. 支持自定义分配器的类中看不到如何使用std::unique_ptr,并且
  2. 想要使类在内存方面尽可能小,不允许我将指向带有单独分配器或共享分配器引用的专用RAII类的指针外包。

另外,我需要在初始值设定项列表中进行第一次分配,因为在实际使用情况下,指针成员实际上是模板的 some 专业中的const

>

现在,这些有很多要求和期望,但是由于我们在这里谈论C ++,所以我觉得仍然有一种方法可以将其存档。还是我实际上需要削减需求?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)