QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 760|回复: 0

STL的string共享内存。大家讨论一下。

[复制链接]
发表于 2004-10-20 21:52:20 | 显示全部楼层 |阅读模式
STL的string类,如果多个string类指向同一个字符串时,共享内存。
也就是说,如果string str1 =str2的话,str1并没有分配内在,而是
指向str2的内存。如果你在此时没有 用string的类函数来改变str2的
内容时,str1的内容也会改变!!!
看下面的代码。
从输出的地址可以看出str与pstr都指向了pstr的数据。
这样当你取得pstr的数据指针时,再改变pstr的内容,
即使pstr被delete了,str的内容也会随之改变。

也就是说,如果这块内存的数据不通过string的类函数去改变的话,
所有指向这块内存的string串都改变了,因为它们共享内存。
string类仅在通过类函数改变数据时才会分配内在。
大家可以看看它的源代码。

所以在使用string时,一定要注意。

下面是测试程序。
#include <iostream>
#include <string>
using namespace std;
int main(int argc,char* argv[])
{
        int iRetCode = 0;
        char buffer[]="hello,this is a test!";
        string str;
        string* pstr = new string(buffer);
        str = (*pstr);
        cout<<str<<endl;
        cout<<"The address of buffer is :"<<(void*)buffer<<endl;
        cout<<"The address of pstr is:"<<(void*)pstr->c_str()<<endl;
        cout<<"The address of str  is:"<<(void*)str.c_str()<<endl;
        void* temp =(void*) pstr->c_str();
        char* temp2 = (char*)temp;
        temp2[0]='a';
        delete pstr;

        cout<<str<<endl;
        return iRetCode;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 07:36 , Processed in 0.040851 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表