【发布时间】:2017-03-28 09:24:59
【问题描述】:
有一个带有指向类对象的指针的双端队列:
deque<myClass*> mydeque;
假设我们在双端队列中有 3 个对象:obj1, obj2, obj3
根据一些比较逻辑说obj1 和obj2 被认为是相同的元素。
当我们在 mydeque 上调用 std::unique 时,它会将双端队列更改为如下所示:
obj1 obj3 obj3
这是因为根据 std::unique 的文档 删除是通过用下一个不重复的元素替换重复的元素来完成的
std::unique 返回一个指向最后一个 obj3 的迭代器。
如果我们想释放obj2占用的内存空间(通过调用delete),如何实现呢?
这里我们不能在返回的迭代器上调用 delete,因为它实际上会删除 obj3。
【问题讨论】:
-
不要使用原始指针;使用
std::shared_ptr<myClass>并让理智解决它。 -
obj3发生了什么事?您是否将原始newed 指针存储在向量中? -
如果你有
deque的指针,那么std::unique应该处理不同地址的对象,那么你的问题是什么? -
我已经编辑了这个问题以更好地解释它
-
@WhozCraig 或者,更好的是:
std::unique_ptr