std:::weak_ptr插入和删除的一组标准。

在我的主应用程序中,我有一个 std::set<std::shared_ptr<Object>>. 我还想创建一套辅助的 std::set<std::weak_ptr<Object>> 因为我不想递增引用计数,但我也想避免使用锁来调用坏的内存位置。不幸的是,我不能定义一个 std::setstd::weak_ptr的内部。这样做后,编译器在插入和删除方法中出现了一些错误。

#include <memory>
#include <set>
#include <vector>
class Test{
private:
    int x ;
public:
    Test(int x){
        this->x = x;
    }
    int getx(){
        return x;
    }
};
int main(){
    std::shared_ptr<Test> t = std::make_shared<Test>(10);
    std::weak_ptr<Test> ref = std::weak_ptr<Test>(t);
    std::set<std::weak_ptr<Test>> weakrefs;
    weakrefs.insert(ref);//compiler error
    weakrefs.erase(ref);//compiler error
}

但是当我使用 std::vector<std::weak_ptr<Test>>我可以推后和弹回。但我希望有类似的功能 std::set.

解决方案:

要有一套 weak_ptr的,你需要 std::owner_less<>,一个特殊的比较运算符。

std::set<std::weak_ptr<Test>, std::owner_less<std::weak_ptr<Test>>> weakrefs;

这个比较运算符使用管理区域来查找智能指针,而不是查找它们所指向的对象的指针。这一点是必要的,因为当智能指针还在 std::set.

实际上,你还应该使用 std::owner_less 对于一组 shared_ptrs.

给TA打赏
共{{data.count}}人
人已打赏
解决方案

将多列值与一列值进行对比

2022-5-13 18:00:32

解决方案

mciSendString,将VB脚本移植到CE Lua脚本中。

2022-5-13 18:00:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索