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 record,delete *record和record.reset(),但是这些都不会编译。
shared_ptr旨在在不再需要时自动删除其管理的对象。当不再有共享指针指向该对象时(例如,指向同一对象的所有共享指针被删除或重置为指向另一个对象),就会发生这种情况。
无需自己删除它。通过设计,甚至没有办法直接自己删除对象,因为这可能会导致一些悬空的指针和不一致。
unique_ptr是另一种智能指针。它们旨在保留分配的对象的所有权,并在销毁唯一指针本身时销毁该对象。
同样,无需自己删除对象。 unique_ptr是为了释放您的职责而创建的。但是在这里,您可以根据需要通过重置指针来销毁托管对象。由于指针是唯一的,因此没有在此处创建悬空指针的风险。
最后还有weak_ptr。它们不拥有对象,而是引用由some管理的对象shared_ptr。这个想法是,weak_ptr的存在不会阻止对象被删除。由于weak_ptr不拥有对象,因此无论您做什么,它都无法删除它。
| 归档时间: |
|
| 查看次数: |
5538 次 |
| 最近记录: |