本文共 3377 字,大约阅读时间需要 11 分钟。
string h1 = “hello”; string h2= h1; string h3; h3 = h2; string w1 = “world”; string w2(“”); w2=w1; |
// 构造函数(分存内存) string::string(const char* tmp) { _Len = strlen(tmp); _Ptr = new char[_Len+1+1]; strcpy( _Ptr, tmp ); _Ptr[_Len+1]=0; // 设置引用计数 } // 拷贝构造(共享内存) string::string(const string& str) { if (*this != str){ this->_Ptr = str.c_str(); // 共享内存 this->_Len = str.szie(); this->_Ptr[_Len+1] ++; // 引用计数加一 } } // 写时才拷贝 Copy-On-Write char& string::operator[](unsigned int idx) { if (idx > _Len || _Ptr == 0 ) { static char nullchar = 0; return nullchar; } _Ptr[_Len+1]--; // 引用计数减一 char* tmp = new char[_Len+1+1]; strncpy( tmp, _Ptr, _Len+1); _Ptr = tmp; _Ptr[_Len+1]=0; // 设置新的共享内存的引用计数 return _Ptr[idx]; } // 析构函数的一些处理 ~string() { _Ptr[_Len+1]--; // 引用计数减一 // 引用计数为0时,释放内存 if (_Ptr[_Len+1]==0) { delete[] _Ptr; } } |
string GetIPAddress(string hostname) { static string ip; …… …… return ip; } |
main() { // 载入动态链接库中的函数 hDll = LoadLibraray(…..); pFun = GetModule(hDll, “GetIPAddress”); // 调用动态链接库中的函数 string ip = (*pFun)(“host1”); …… …… // 释放动态链接库 FreeLibrary(hDll); …… cout << ip << endl; } |