2014-12-22 52 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

好的 - 我现在看到为什么每个帖子只有一个问题。我的问题都得到了回答,但是通过不同的海报。我只能接受一个帖子作为答案,所以一个好的答案没有得到承认。 –