小编Umu*_*ood的帖子

我应该在主要不是容器上使用shared_ptr或weak_ptr吗?

我有两个标准容器.它们都指向相同的数据结构.第一个包含所有数据,第二个包含一些相同的数据.我应该使用shared_ptrweak_ptr在第二个容器上?

首先,当我阅读我想unique_ptr在第一个集合上使用的参考时.我的第一个集合包含所有数据,它是唯一一个"拥有"的数据.这意味着如果数据不存在,则应将其删除.但是当我尝试创建第二个集合时,我不知道该怎么做.我创建了一个唯一的指针,但现在我需要另一个指向同一元素的指针来破坏唯一性,但事实上真正的所有者并不是新的指针.所以我理解(我希望我没有错),唯一性是在达到元素的方式而不是(例如)删除元素的可能性.所以,shared_ptr.我在他的第一个系列中有它们.但是现在第二个出现了,我想用了shared_ptr这里也.访问相同数据的方式可能都是,因此所有者是两个.但在我的情况下,数据总是从之前的第二个删除.如果我使用a weak_ptr,所有者的数量不会增加.在这两种情况下,当第一个集合需要时,元素将被删除.最后我正在使用shared_ptr因为weak_ptr我需要lock()每行代码中的每个指针,使其可读性降低.但我应该真正使用什么?

c++ smart-pointers c++11

9
推荐指数
2
解决办法
1171
查看次数

C++使用已删除的函数错误

我正在使用已删除的函数错误.我刚换的指针weighted_pointerunique_ptr.但我无法理解为什么我会收到错误,任何提示?

likeatree是一个DAG结构,可以指向另一个结构或stdDeque基于掩码值的元素.

weightweighted_pointermutable关键字,因为不改变其中一组会.

#include <deque>
#include <set>
#include <vector>
#include <iostream>
#include <algorithm>
#include <memory>
#include <chrono>

using namespace std;

struct likeatree{
    unsigned int mask : 3;
    void * a;
    void * b;
};

struct weighted_pointer{
    mutable int weight;
    unique_ptr<likeatree> ptr;
};

struct ptrcomp{
    bool operator()(const weighted_pointer & lhs, const weighted_pointer & rhs) {
        if(lhs.ptr->mask < rhs.ptr->mask)
            return true;
        if(lhs.ptr->mask > rhs.ptr->mask)
            return false;
        if(lhs.ptr -> …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers c++11

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

c++11 ×2

smart-pointers ×2