C++ 将unigue_ptr作为共享_ptr传递到向量中

C++ 将unigue_ptr作为共享_ptr传递到向量中,c++,shared-ptr,unique-ptr,C++,Shared Ptr,Unique Ptr,下面是一个测试,以了解有关共享\u ptr和唯一\u 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:

下面是一个测试,以了解有关
共享\u ptr
唯一\u 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
  }
#包括
#包括
#包括
std::向量向量向量;
int*get()
{
对于(尺寸i=0;i<1;++i)
{
向量ptr.push_back(std::make_unique());
}
返回vec_ptr.back().get();
}
int main()
{
int-obj=5;
int*ptr=get();
ptr=&obj;

std::cout您似乎想做:

*ptr = obj;
而不是

ptr = &obj;

前者将整数
obj
复制到
ptr
指向的空间中。后者(您正在执行的操作)将
ptr
重新指向
obj

,似乎您想执行以下操作:

*ptr = obj;
而不是

ptr = &obj;

前者将整数
obj
复制到
ptr
指向的空间中。后者(您正在执行的操作)将
ptr
重新指向
obj

以下是您在该程序中拥有的内容:

  • vec_ptr
    包含3个元素,每个元素都是0
  • obj
    ,值为5
  • ptr
    ,指向
    obj
因此,程序将打印正确的值5和0。如果要更改其中一个指针的值,则应按如下方式分配:

*ptr = obj;

然后,
ptr
将指向
vec\u ptr
的最后一个元素(由
get()
返回),该元素的值为5。但是,您的最后一行仍将打印0,因为这将打印向量的第一个元素,而不是最后一个元素。

以下是您在该程序中拥有的内容:

  • vec_ptr
    包含3个元素,每个元素都是0
  • obj
    ,值为5
  • ptr
    ,指向
    obj
因此,程序将打印正确的值5和0。如果要更改其中一个指针的值,则应按如下方式分配:

*ptr = obj;

然后,
ptr
将指向
vec\u ptr
的最后一个元素(由
get()
返回),其值为5。但是,您的最后一行仍将打印0,因为这将打印向量的第一个元素,而不是最后一个元素。

您试图实现的是什么,与观察到的结果有何不同?没有为vec_ptr的任何元素赋值。您试图实现的是什么,与f有何不同从观察到的结果来看?没有给vec_ptr的任何元素赋值。谢谢,我现在明白了,我想get返回一种参考指针hanks,我现在明白了,我想get返回一种参考指针