如何像普通指针一样增加shared_ptr

时间:2014-09-06 22:14:26

标签: c++ c++11 recursion smart-pointers

我正在尝试使用c ++智能指针反向打印char数组。我遇到两个问题。 1是我正在尝试调试的运行时错误,另一个是每次我必须增加shared_ptr的事实我必须使用get()方法。

我正在粘贴我的两个功能。一个只使用指针反转字符串的人。 和一个使用共享ptr。

    int display_string_reversep(char* astring)
{ 
  char* achar = astring;
  if((*achar) != '\0')
    {
      char* x= achar;
      x++;
      display_string_reversep(x);
      cout<<(*achar);
    }
    return 0;
} 
int display_string_reverseup(shared_ptr<char> astring)
{ 
  shared_ptr<char> achar(astring);
  //if((*achar) != '\0')
  if(achar != nullptr)
    {
      if(*(achar.get()+1) != '\0')
    {
      shared_ptr<char> x(achar.get()+1);
      //x++;
      display_string_reverseup(x);
    }
      cout<<(achar);
    }
    return 0;
} 

我是c ++ 11的新手,这只是我练习的一个小练习。 到目前为止,互联网没有让我增加共享指针的其他方法。在那儿 ?

char astring [] = {'F','e','l','l','o','w','\0'};

  display_string_reversep(astring);
  display_string_reverseup(shared_ptr<char>(astring));

1 个答案:

答案 0 :(得分:9)

不要增加shared_ptr

shared_ptr是指向内存节点的引用计数指针。当引用计数降至零时,其目的是delete节点。它不是原始指针的替代品。

shared_ptr可以指向一个数组。在这种情况下,您索引到数组。不要递增shared_ptr

如果你有一个指向char数组的智能指针,以便在完成时删除数组,你可以复制它的原始指针并递增它。