如何删除指向动态分配对象的智能指针?

Jon*_*ton 2 c++ memory-management smart-pointers shared-ptr

我做了一个迭代器,当取消引用时,它返回std::shared_ptr指向动态分配的副本std::pair(在new迭代器的内部创建)。迭代器按原样运行,但希望pair在循环结束时释放,以防止内存泄漏。

for (auto it = parser.begin(); it != parser.end(); ++it) {
    shared_ptr<pair<string, string>> record = *it;
    // Analysis of pair
    // delete pair with delete, or reset
}
Run Code Online (Sandbox Code Playgroud)

但是,我在释放时遇到了麻烦pair。我已经尝试了delete recorddelete *recordrecord.reset(),但是这些都不会编译。

Chr*_*phe 6

shared_ptr旨在在不再需要时自动删除其管理的对象。当不再有共享指针指向该对象时(例如,指向同一对象的所有共享指针被删除或重置为指向另一个对象),就会发生这种情况。

无需自己删除它。通过设计,甚至没有办法直接自己删除对象,因为这可能会导致一些悬空的指针和不一致。

unique_ptr是另一种智能指针。它们旨在保留分配的对象的所有权,并在销毁唯一指针本身时销毁该对象。

同样,无需自己删除对象。 unique_ptr是为了释放您的职责而创建的。但是在这里,您可以根据需要通过重置指针来销毁托管对象。由于指针是唯一的,因此没有在此处创建悬空指针的风险。

最后还有weak_ptr。它们不拥有对象,而是引用由some管理的对象shared_ptr。这个想法是,weak_ptr的存在不会阻止对象被删除。由于weak_ptr不拥有对象,因此无论您做什么,它都无法删除它。