2014-12-22 54 views
-1

我已讀出的磁盤文件到內存到聲明爲通過一個磁盤陣列:Ss是什麼意思?

char * buffer = new char [length]; 

然後重新解釋數組:

std::string strbuf(reinterpret_cast<const char *>(buffer), length); 

並立即檢查所提供的串的類型。

cout << "buffer is: " << typeid(buffer).name() << '\n'; 
cout << "strbuf is: " << typeid(strbuf).name() << '\n'; 
buffer is: Pc 
strbuf is: Ss */ 

正如您所看到的,字符串「strbuf」是Ss類型。那是什麼意思?

+1

這是一個損壞的類型名稱。請參閱[這個問題](http://stackoverflow.com/questions/281818/unmangling-the-result-of-stdtype-in​​foname) – Barry

+2

_每個問題的一個問題,請。這應該是不言而喻的。你不會去維基百科有關「狗」的文章,並期望也可以找到貓的描述。 –

回答

6

Ss根據Itanium ABI mangling rulesstd::basic_string<char, std::char_traits<char>, std::allocator<char>>的損壞名稱。

如果您有應用在你的心中規則的麻煩,你可以使用c++filt工具:

$ c++filt <<< _ZSs 
std::basic_string<char, std::char_traits<char>, std::allocator<char> > 
1

這條線:

std::string strbuf(reinterpret_cast<const char *>(buffer), length); 

這實際上應該是:

std::string strbuf(buffer, length); 

不是解釋爲buffer作爲st環。它拷貝它。 strbuf此時擁有自己的整個緩衝區副本。當你做delete [] buffer;strbuf仍然有它自己的,並且仍然是一個完全有效的對象。由於string管理自己的內存,因此您不需要明確地刪除它 - 您可以讓它超出範圍。

+0

好的 - 我現在看到爲什麼每個帖子只有一個問題。我的問題都得到了回答,但是通過不同的海報。我只能接受一個帖子作爲答案,所以一個好的答案沒有得到承認。 –