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

can*_*tan 1 c++ recursion smart-pointers c++11

我正在尝试使用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;
} 
Run Code Online (Sandbox Code Playgroud)

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

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

  display_string_reversep(astring);
  display_string_reverseup(shared_ptr<char>(astring));
Run Code Online (Sandbox Code Playgroud)

Jer*_*101 9

不要增加shared_ptr.

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

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

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