我正在尝试使用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));
答案 0 :(得分:9)
不要增加shared_ptr
。
shared_ptr
是指向内存节点的引用计数指针。当引用计数降至零时,其目的是delete
节点。它不是原始指针的替代品。
shared_ptr
可以指向一个数组。在这种情况下,您索引到数组。不要递增shared_ptr
。
如果你有一个指向char数组的智能指针,以便在完成时删除数组,你可以复制它的原始指针并递增它。