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)一样简单?
你可以为reply_t实现一个删除buf的析构函数:
struct reply_t {
unsigned int xid;
char *buf;
~reply_t() { delete buf; }
};
Run Code Online (Sandbox Code Playgroud)