提问人:Rodrigo 提问时间:11/7/2023 更新时间:11/7/2023 访问量:74
警告STL4016:std::shared_ptr::unique() 在 C++17 中已弃用,如何替换?
warning STL4016: std::shared_ptr::unique() is deprecated in C++17, how to replace it?
问:
我有以下用法.unique()
void pixmappool::flush() {
auto it = _pool.begin();
while (it != _pool.end()) {
if (it->second.unique()) {
it = _pool.erase(it);
} else {
++it;
}
}
}
在哪里:_pool
std::unordered_map<std::string, std::shared_ptr<pixmap>, std::hash<std::string>> _pool;
这非常有效,因为我的应用程序没有线程(我没有创建任何线程)。
是否可以将其更改为“std::weak_ptr”并具有相同的行为(当它只有一个副本时,将其删除)。_pool
到目前为止,我所读到的,我应该用来将副本放入 std::shared_ptr,然后使用 ,对吗?weak_ptr.lock()
weak_ptr.use_count()
答: 暂无答案
评论
.use_count() == 1
相当于以前做的事。如果你只有一个线程,那也没关系。或使用 .这两个选项是相互排斥的。.unique()
std::weak_ptr
use_count
weak_ptr
lock
expired
flush
weak_ptr