#include <iostream>
#include <string>
#include <vector>
std::shared_ptr<std::vector<std::string>> AssignValue() {
std::vector<std::string> str_v1;
std::string s1 = "hello";
std::string s2 = "world";
str_v1.push_back(s1);
str_v1.push_back(s2);
// std::make_shared 自动分配内存
auto make_ptr_1 = std::make_shared<std::vector<std::string>>(str_v1);
// 栈分配
// std::shared_ptr<std::vector<std::string>>make_ptr_1(&str_v1);
return make_ptr_1;
}
int main() {
std::shared_ptr<std::vector<std::string>> make_ptr_2(AssignValue());
// 效果一样
// make_ptr_2 = AssignValue();
auto count = make_ptr_2.get()->size();
auto refer_num = make_ptr_2.use_count();
/* 下面注释的代码看看就好
std::vector<std::string> *copy_v2 = make_ptr_2.get();
std::cout << copy_v2[0].data()[0] << std::endl;
std::cout << copy_v2[0].data()[1] << std::endl;
*/
for (int i = 0; i < count; i++) {
std::cout << make_ptr_2 << std::endl;
// 带不带 get() 都能返回指针地址
std::cout << make_ptr_2->data()[i].c_str() << std::endl;
std::cout << make_ptr_2.get()->data()[i].c_str() << std::endl;
}
return 0;
}
最后输出: