shared_ptr
我的问题涉及make_shared
C++11。我有两个向量,第一个存储智能指针,第二个存储原始指针。第一个向量按我的预期工作,但向量2 只是令人困惑......
代码示例
#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;
}
输出
vector1 values:
1
2
3
vector2 values:
6
6
6
问题
我意识到创建原始指针而不是尝试转换智能指针会简单得多,但这让我很想知道为什么会这样?另外为什么每次推送都会改变vector2中的所有值?
链接
以下是我在 stackoverflow 中发现的一些问题,但他们没有回答我的问题,或者我可能不明白答案......