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
的概念。他们共享所有权,而非记忆。智能指针都是关于所有权的。
使用共享指针,只要有对象引用它,它拥有的内存就会保持活动状态
(与只有一个人可以拥有这块内存的唯一指针不同。如果这个单一引用被销毁,唯一指针拥有的内存将自动销毁。)
在现实生活中你几乎不需要共享指针。如果要跨实例共享内容,则需要将其设为静态。
我是智能指针的新手,更不用说 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
的概念。他们共享所有权,而非记忆。智能指针都是关于所有权的。
使用共享指针,只要有对象引用它,它拥有的内存就会保持活动状态
(与只有一个人可以拥有这块内存的唯一指针不同。如果这个单一引用被销毁,唯一指针拥有的内存将自动销毁。)
在现实生活中你几乎不需要共享指针。如果要跨实例共享内容,则需要将其设为静态。