为什么C共享指针的行为不像迭代器的标准指针?
发布时间:2020-12-16 05:03:55 所属栏目:百科 来源:网络整理
导读:我要在C中制作一个随机数生成器,为了避免复制太大的向量,我想把指针传递给它们.我不想自己处理垃圾收集.这就是为什么我想使用shared_ptr(我可能会补充说我是一个新手,所以也许我的方法是笨拙的/不适合这个问题.).现在我想搜索向量,但分别有一个奇怪的行为:s
我要在C中制作一个随机数生成器,为了避免复制太大的向量,我想把指针传递给它们.我不想自己处理垃圾收集.这就是为什么我想使用shared_ptr(我可能会补充说我是一个新手,所以也许我的方法是笨拙的/不适合这个问题.).现在我想搜索向量,但分别有一个奇怪的行为:shared_ptr和shared_ptr.get():要么找不到合适的解决方案(参见代码片段),要么他们甚至抛出一个
在其他情况下.我看到该位置接近于0(=空指针),但为什么呢? 使用标准指针可以得到正确的结果. #include <typeinfo> #include <algorithm> #include <vector> #include <memory> using namespace std; int j = 3; vector< int > v; v.push_back(1); v.push_back(3); v.push_back(5); vector< int >* v_pointer = &v; shared_ptr<vector< int >> v_shared = make_shared<vector<int>>(); vector< int >* v_pointer_from_shared = v_shared.get(); // printing types of objects cout << typeid(v.begin()).name() << endl; cout << typeid(v_pointer->begin()).name() << endl; cout << typeid(v_shared->begin()).name() << endl; // do search if (binary_search(v.begin(),v.end(),j)) cout << "yeah" << endl; if (binary_search(v_pointer->begin(),v_pointer->end(),j)) cout << "yeah2" << endl; if (binary_search(v_shared->begin(),v_shared->end(),j)) cout << "yeah3" << endl; if (binary_search(v_pointer_from_shared->begin(),v_pointer_from_shared->end(),j)) cout << "yeah4" << endl; 输出: 是啊 yeah2 那么为什么不出现呢?因为typeid是相同的…或者至少是yeah4,这也是一个普通的指针.我想,有一些关于shared_pointers的理论,我不明白…… 我在64位Windows 7上使用VS 2012 Express. 解决方法
看看你如何设置shared_ptr和法线向量:
int j = 3; vector< int > v; v.push_back(1); v.push_back(3); v.push_back(5); vector< int >* v_pointer = &v; shared_ptr<vector< int >> v_shared = make_shared<vector<int>>(); vector< int >* v_pointer_from_shared = v_shared.get(); 您从未在shared_ptr指向的向量中插入任何内容,因此在执行binary_search时,此处的正确行为是报告向量中不存在任何值.请注意,v和您指向的向量不是相同的向量,也不应该是向量. 希望这可以帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |