C++ 在std::Vector中重新迭代时,Shared_ptr为空

C++ 在std::Vector中重新迭代时,Shared_ptr为空,c++,c++11,shared-ptr,smart-pointers,stdvector,C++,C++11,Shared Ptr,Smart Pointers,Stdvector,下面是一个执行类的程序,它填充了如下所示的映射 map<string,map<string,vector<StructAbsTypeObject>>> 执行检查功能时,PTR无效输出。预期输出为 PTR在两种情况下均有效 请让我知道上面的代码出了什么问题。我确实尝试了一些事情,但没有成功。如果它不起作用,原因是什么?正确的方法是什么 提前感谢。在for循环中: for(auto outermap : m_executormap) { for(au

下面是一个执行类的程序,它填充了如下所示的映射

map<string,map<string,vector<StructAbsTypeObject>>>
执行检查功能时,PTR无效输出。预期输出为 PTR在两种情况下均有效

请让我知道上面的代码出了什么问题。我确实尝试了一些事情,但没有成功。如果它不起作用,原因是什么?正确的方法是什么

提前感谢。

在for循环中:

  for(auto outermap : m_executormap) {
    for(auto innermap : outermap.second) {
      for(auto vec_element: innermap.second) {
您使用的是默认为非参考类型的
auto
,因此您要复制地图/矢量中的每个元素。您的更改正在应用于这些临时副本,因此将丢失

只需将这些更改为引用即可更新原始列表:

  for(auto& outermap : m_executormap) {
    for(auto& innermap : outermap.second) {
      for(auto& vec_element: innermap.second) {

创建一个代码,这是很多代码。大多数人没有时间阅读这些内容,你真的应该创建一个复制构造函数。你手动定义复制构造函数/赋值运算符有什么特殊原因吗?编译器将正确地为您执行此操作(另请参见第五条规则)。另外,请在编译器中启用警告,
AbsTypeObject&operator=(const-AbsTypeObject&other)
声明返回值,但不返回。这是未定义的行为。(我有没有提到你应该让编译器生成这个函数,因为它会正确地完成它?)。我没有想到。它正在工作。
  for(auto outermap : m_executormap) {
    for(auto innermap : outermap.second) {
      for(auto vec_element: innermap.second) {
  for(auto& outermap : m_executormap) {
    for(auto& innermap : outermap.second) {
      for(auto& vec_element: innermap.second) {