在STL容器中释放内存

Nem*_*emo 0 c++ lambda iterator memory-management

我有一个对象列表:

struct reply_t {
    unsigned int xid;
    char *buf;     
};

std::list<reply_t> > replies;
Run Code Online (Sandbox Code Playgroud)

我想删除该列表中的一些元素(这些元素xid <= confirmed_id).我喜欢简明扼要std :: remove_if.

remove_if(replies.begin(), replies.end(), 
   [&confirmed_id](const reply_t &arg) { return arg.xid <= confirmed_id; }); 
Run Code Online (Sandbox Code Playgroud)

问题是这不会释放bufs(在其他地方分配).有没有一种优雅的方式来处理这个?它是否像在对象析构函数中添加free(buf)一样简单?

Flo*_*ian 5

你可以为reply_t实现一个删除buf的析构函数:

struct reply_t {
    unsigned int xid;
    char *buf;
    ~reply_t() { delete buf; }
};
Run Code Online (Sandbox Code Playgroud)