C++ Shared_Ptr 不共享?

C++ Shared_Ptr not sharing?

我是智能指针的新手,更不用说 C++ 了,所以请多多包涵。我的程序试图构建具有唯一序列号的 classes。它通过将已经制作的序列号放入 shared_ptr 中来实现。理论上,这个指针应该与所有 classes 共享集合,但它没有做到。 这是我的 class 代码:

#include <iostream>
#include <cstdlib>
#include <set>
#include <memory>
#include <algorithm>

struct numbered{
    numbered();
    int mysn;
    std::shared_ptr<std::set<int>> catalogue = std::make_shared<std::set<int>> ();
};

numbered::numbered(){
    while (true){
        int check = rand() & 100; 
        if(catalogue->find(check) == catalogue->end()){  // if this number is not already in the catalogue
            mysn = check; // make this the serial number
            // add this to the log of illegal serial numbers
            catalogue->insert(mysn);
            return; // stop making new numbers to check for            
        }
        else{ // temporary provision, just to get this to work
            mysn = 5;
            return;
        }
    }
}

这是我的主要代码:

#include <iostream>
#include "numberedheader.hpp"

using namespace std;

int main(){
    numbered a, b;
    cout << a.mysn << " " << b.mysn << endl;
    system("pause");
    return 0;
}

我已经 运行 进行了一些测试。目录能够找到整数并能够更新以包含最新的整数,但是,似乎每个 class 都有一个新的目录集,而不是一个共享目录。我在这里做错了什么?谢谢你的时间。

你好像误解了shared pointers的概念。他们共享所有权而非记忆。智能指针都是关于所有权的。

使用共享指针,只要有对象引用它,它拥有的内存就会保持活动状态
(与只有一个人可以拥有这块内存的唯一指针不同。如果这个单一引用被销毁,唯一指针拥有的内存将自动销毁。)

在现实生活中你几乎不需要共享指针。如果要跨实例共享内容,则需要将其设为静态。