我有两个标准容器.它们都指向相同的数据结构.第一个包含所有数据,第二个包含一些相同的数据.我应该使用shared_ptr
或weak_ptr
在第二个容器上?
首先,当我阅读我想unique_ptr
在第一个集合上使用的参考时.我的第一个集合包含所有数据,它是唯一一个"拥有"的数据.这意味着如果数据不存在,则应将其删除.但是当我尝试创建第二个集合时,我不知道该怎么做.我创建了一个唯一的指针,但现在我需要另一个指向同一元素的指针来破坏唯一性,但事实上真正的所有者并不是新的指针.所以我理解(我希望我没有错),唯一性是在达到元素的方式而不是(例如)删除元素的可能性.所以,shared_ptr
.我在他的第一个系列中有它们.但是现在第二个出现了,我想用了shared_ptr
这里也.访问相同数据的方式可能都是,因此所有者是两个.但在我的情况下,数据总是从之前的第二个删除.如果我使用a weak_ptr
,所有者的数量不会增加.在这两种情况下,当第一个集合需要时,元素将被删除.最后我正在使用shared_ptr
因为weak_ptr
我需要lock()
每行代码中的每个指针,使其可读性降低.但我应该真正使用什么?
我正在使用已删除的函数错误.我刚换的指针weighted_pointer
来unique_ptr
.但我无法理解为什么我会收到错误,任何提示?
这likeatree
是一个DAG结构,可以指向另一个结构或stdDeque
基于掩码值的元素.
该weight
中weighted_pointer
有mutable
关键字,因为不改变其中一组会.
#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)