Мой вопрос касается shared_ptr
и make_shared
в С++ 11. У меня два вектора, первый хранит интеллектуальные указатели, а второй хранит исходные указатели. Первый вектор работает так, как я это сделал, но vector2 просто запутывает...
Пример кода
#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, но они не ответили на мой вопрос или, может быть, я не понял ответы...