当我知道插入的指针时,如何从 boost::ptr_set 中删除?
当我知道插入的指针时,如何从 boost::ptr_set
中删除? (我有一个指向插入的类对象的 this 指针)。
这是一个人为的示例来展示我想要做的事情:
boost::ptr_set<ServerConnection1> m_srv_conns1;
ServerConnection1 *this_ptr;
m_srv_conns1.insert(this_ptr = new ServerConnection1);
m_srv_conns1.erase(this_ptr); //It won't work!
有一个指向插入对象的 this
指针,如何告诉 boost::ptr_set
到 删除(这个)
?注意:我不再位于插入的对象内,但我有一个指向它的指针。
更新
其中一条评论是我没有满足 boost::ptr_set
的所有要求。有什么要求?
我认为提供一个 <运算符
可以解决问题吗?
回答
- 将
m_srv_conns1.erase(this_ptr);
更改为m_srv_conns1.erase(*this_ptr);
- 将以下代码放入
ServerConnection1
类中:
布尔运算符<(const ServerConnection1 & sc1) const
<代码>{return(this<&sc1); //指针比较
<代码>}
How do I delete from a boost::ptr_set
when I know the pointer I inserted? (I have a this pointer to the inserted class object).
Here is a contrived example to show what I am trying to do:
boost::ptr_set<ServerConnection1> m_srv_conns1;
ServerConnection1 *this_ptr;
m_srv_conns1.insert(this_ptr = new ServerConnection1);
m_srv_conns1.erase(this_ptr); //It won't work!
Having a this
pointer to the inserted object, how do I tell the boost::ptr_set
to erase(this)
? Note: I am no longer within the inserted object, but I have a pointer to it.
Update
One of the comments was that I was not fulfilling all the requirements of boost::ptr_set
. What are the requirements?
I think providing a < operator
would do the trick?
Answer
- Change
m_srv_conns1.erase(this_ptr);
tom_srv_conns1.erase(*this_ptr);
- Put the following code inside the
ServerConnection1
class:
bool operator<(const ServerConnection1 & sc1) const
{
return (this < &sc1); //Pointer comparison
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
尝试
m_srv_conns1.erase(*this_ptr);
。Try
m_srv_conns1.erase(*this_ptr);
.