首页 > 系统相关 >string传递内存参数

string传递内存参数

时间:2023-05-14 16:24:38浏览次数:45  
标签:std string 参数 内存 字符串 拷贝

使用string作为函数参数内存的输入

  • 使用string 传递和获取内存不需要考虑内存释放
  在 C++ 中,使用 std::string 类型进行字符串的传递和获取不需要显式考虑内存释放的原因是,std::string 类实现了自动内存管理。 std::string 类封装了对字符串内存的分配和释放操作,它负责在构造、赋值、拷贝和销毁等操作期间管理字符串所需的内存。当你将 std::string 对象传递给函数或从函数返回时,会调用适当的构造函数、拷贝构造函数或移动构造函数,这些操作会自动处理内存的分配和释放。   具体而言,std::string 类使用动态分配的内存来存储字符串,并在需要时自动调整分配的内存大小。当一个 std::string 对象超出其当前分配的内存容量时,它会自动分配更大的内存,并将原来的字符串内容复制到新的内存中。当一个 std::string 对象销毁时,它会自动释放分配的内存。   这种自动内存管理的特性使得使用 std::string 类型进行字符串操作更加方便和安全。你不需要显式地分配或释放内存,也不需要担心内存泄漏或悬空指针的问题,因为这些操作都由 std::string 类来处理。
  • 可以获取已申请内存大小       

   

  在传递参数的时候,如果参数是string类型,可以用string类型的引用,减少内存的拷贝。

例如:

 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的地址为新的内存空间

标签:std,string,参数,内存,字符串,拷贝
From: https://www.cnblogs.com/kongyijin/p/17399476.html

相关文章