使用string作为函数参数内存的输入
- 使用string 传递和获取内存不需要考虑内存释放
std::string
类型进行字符串的传递和获取不需要显式考虑内存释放的原因是,std::string
类实现了自动内存管理。
std::string
类封装了对字符串内存的分配和释放操作,它负责在构造、赋值、拷贝和销毁等操作期间管理字符串所需的内存。当你将 std::string
对象传递给函数或从函数返回时,会调用适当的构造函数、拷贝构造函数或移动构造函数,这些操作会自动处理内存的分配和释放。
具体而言,std::string
类使用动态分配的内存来存储字符串,并在需要时自动调整分配的内存大小。当一个 std::string
对象超出其当前分配的内存容量时,它会自动分配更大的内存,并将原来的字符串内容复制到新的内存中。当一个 std::string
对象销毁时,它会自动释放分配的内存。
这种自动内存管理的特性使得使用 std::string
类型进行字符串操作更加方便和安全。你不需要显式地分配或释放内存,也不需要担心内存泄漏或悬空指针的问题,因为这些操作都由 std::string
类来处理。
- 可以获取已申请内存大小
在传递参数的时候,如果参数是string类型,可以用string类型的引用,减少内存的拷贝。
例如:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 void func(const std::string& str){ 5 cout << "str = " << str << endl; 6 cout << "address of \"str\" : " << &str << endl; 7 } 8 void funcB(const std::string str){ 9 cout << "str = " << str << endl; 10 cout << "address of \"str\" : " << &str << endl; 11 } 12 int main(int agrc, char** argv){ 13 string strInMain= "test"; 14 func(strInMain); 15 funcB(strInMain); 16 17 cout << "strInMain = " << strInMain << endl; 18 cout << "address of \"strInMain\" : " << &strInMain << endl; 19 return 0; 20 }View Code
func没有拷贝变量,而是直接将main中的strInMain的地址传入,所以在func中的参数str的地址和main中strInMain的地址相同。
funcB参数对strInMain进行拷贝,所以参数str的地址为新的内存空间