这是一项测试,可以了解有关shared_ptr
和unique_ptr
的更多信息:
#include <string>
#include <memory>
#include <vector>
std::vector<std::shared_ptr<int> > vec_ptr;
int* get()
{
for (size_t i = 0; i < 1; ++i)
{
vec_ptr.push_back(std::make_unique<int>());
}
return vec_ptr.back().get();
}
int main()
{
int obj = 5;
int* ptr = get();
ptr = &obj;
std::cout << *ptr << std::endl;
std::cout << *vec_ptr[0].get() << std::endl; //expect: 5, but it is 0
}
显然没有为vec_ptr
分配任何内容。有人可以向我解释一下吗?
答案 0 :(得分:2)
似乎你想做:
*ptr = obj;
而不是
ptr = &obj;
前者将整数obj
复制到ptr
指向的空间。后者(你正在做的)重新指向ptr
指向obj
。
答案 1 :(得分:2)
以下是此计划的内容:
vec_ptr
包含3个元素,每个元素都为0. obj
,值为5. ptr
,指向obj
。所以程序打印正确的值5和0.如果你想改变其中一个指针的值,那么你应该像这样分配它:
*ptr = obj;
然后,ptr
将指向vec_ptr
的最后一个元素(由get()
返回),其值为5.但是,您的最后一行仍会打印0 ,因为它打印了矢量的第一个元素,而不是最后一个元素。