C++11 storing multiple shared pointers as raw pointers
我的问题涉及C++ 11中的EDOCX1·0和
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> #include <vector> #include <memory> int main() { std::vector<std::shared_ptr<int>> vector1; vector1.push_back(std::make_shared<int>(1)); vector1.push_back(std::make_shared<int>(2)); vector1.push_back(std::make_shared<int>(3)); std::vector<int*> vector2; vector2.push_back(std::make_shared<int>(4).get()); vector2.push_back(std::make_shared<int>(5).get()); vector2.push_back(std::make_shared<int>(6).get()); std::cout <<"vector1 values:" << std::endl; for(auto &value: vector1) { std::cout << *value << std::endl; } std::cout <<"vector2 values:" << std::endl; for(auto &value: vector2) { std::cout << *value << std::endl; } return 0; } |
< BR>
产量1 2 3 4 5 6 7 8 | vector1 values: 1 2 3 vector2 values: 6 6 6 |
< BR>
问题我意识到,开始创建原始指针会更简单,而不是试图转换智能指针,但这让我好奇为什么会发生这种情况?为什么每次推送都会改变矢量中的所有值?
< BR>
链接以下是我在StackOverflow中发现的一些问题,但它们没有回答我的问题,或者我可能不理解答案…
- 原始指针参数的共享指针
- 使用make_shared创建共享的_ptr有什么缺点吗?
- C++原始指针和STD::
- 从共享指针提取原始指针
使用
这是一个功能。你希望这发生:否则,你会泄露内存。想象一下这个代码:
1 2 | vector<int> integers; integers.push_back(*make_shared<int>(6).get()); |
如果内存没有释放,那么以后就没有办法释放它了,因为您无法恢复共享指针的托管指针。
你看到的是未定义的行为。当你这样做的时候:
1 | vector2.push_back(std::make_shared<int>(4).get()); |
您正在创建一个临时的