我有一个代码片段,它使用std :: map :: \ templace将元素插入到地图中。关键是unique_ptr的内部版本。
标准规定:
即使容器中已经存在带有键的元素,也可以构造该元素,在这种情况下,新构造的元素将立即被销毁。
在下面的代码片段中,如果构造/破坏了包装器,它将正确地破坏裸指针。如果不是,则该对象将被泄露。该片段只是一个例子。
class Wrapper {
public:
Wrapper(int* param):
value(param) {}
~Wrapper() { delete value;}
bool operator<(const Wrapper& other) const { return *value < *other.value;}
private:
int * value;
};
int main()
{
std::map<Wrapper, int> map;
{
int *key = new int(100);
map.emplace(key, 5);
}
{
int *keyDuplicate = new int(100);
map.emplace(keyDuplicate, 10);
}
}
处理似乎取决于实现。我可以检查返回值并销毁对象(如果它是重复的)。但是如果对象是构造和删除的,我会删除指针两次。