linux下面的stl版本(或者说sgi版本)std::string,如果内存池相同的话,是引用计数的(大部分情况下是使用默认内存池,所以内存池肯定是一样的)。
std::string b = "aaa";
std::string a(b);
这样做会导致引用计数,即a b两个对象指向的实际是同一个内存块。
此时如若直接操作 a.c_str()或a.data()(当然平时很少这样,但我在程序中这么做了)。结果可想而知,呵呵。
打个标签,引以为戒。
本文探讨了Linux环境下std::string的实现机制,特别是当使用相同内存池时,std::string对象如何通过引用计数共享同一内存区域。此外,还分析了直接操作std::string内部指针可能引发的问题。
linux下面的stl版本(或者说sgi版本)std::string,如果内存池相同的话,是引用计数的(大部分情况下是使用默认内存池,所以内存池肯定是一样的)。
std::string b = "aaa";
std::string a(b);
这样做会导致引用计数,即a b两个对象指向的实际是同一个内存块。
此时如若直接操作 a.c_str()或a.data()(当然平时很少这样,但我在程序中这么做了)。结果可想而知,呵呵。
打个标签,引以为戒。
1194
6248