【发布时间】:2013-11-19 08:37:29
【问题描述】:
我有一张这样声明的地图:
static map<string, pair<Socket*,queue<string>*>> panels;
其中 Socket 是一个用户定义的类,用于封装 Linux 套接字。 Socket* 用作指向自动分配变量的指针,队列是动态分配的。 我以这种方式在地图中插入新元素:
panels.insert(make_pair(cdhw, make_pair(&sock, new queue<string>())));
当我必须删除地图的一个元素时,我会这样做:
delete( (panels.find(cdhw))->second.second ); //delete queue
panels.erase(cdhw);
cdhw 是一个用于识别面板的字符串。
这是删除和擦除的正确方法吗?在地图和/或一对中使用指针是否存在问题?擦除后我收到“分段错误(核心转储)”但我不明白问题是在删除还是其他代码(可能与多线程有关)。
【问题讨论】:
-
当
sock已经超出范围时,你不会做任何这些,是吗? -
对于初学者,不要动态分配队列。那只会带来痛苦。
-
你最好为你的队列使用智能指针
-
在这样的容器中存储指针可能有点冒险,尤其是当您的 Socket* 是一个自动变量时。
-
@Antonio:不,直接存储队列。额外的间接层在这里没有用处。