Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STD::string作为动态分配对象的成员参数_C++_String_Memory Management_Std_Stdstring - Fatal编程技术网

C++ STD::string作为动态分配对象的成员参数

C++ STD::string作为动态分配对象的成员参数,c++,string,memory-management,std,stdstring,C++,String,Memory Management,Std,Stdstring,我希望动态分配对象集(可以是几百个)。这些对象的一部分是文本字段。因为std::string提供了很好的字符串操作,所以我更喜欢使用类型为std:string的对象成员参数 但是,std::string是可动态调整大小的对象。对我来说,这与包含std::string的动态分配对象相违背:如果std::string大于计划值,则可能会出现分配内存溢出 我可以请教一下std::string是否适合作为动态分配对象的参数吗 如何使用std::string进行操作,这样就不会出现内存溢出 即使动态分配

我希望动态分配对象集(可以是几百个)。这些对象的一部分是文本字段。因为std::string提供了很好的字符串操作,所以我更喜欢使用类型为std:string的对象成员参数

但是,std::string是可动态调整大小的对象。对我来说,这与包含std::string的动态分配对象相违背:如果std::string大于计划值,则可能会出现分配内存溢出

  • 我可以请教一下std::string是否适合作为动态分配对象的参数吗
  • 如何使用std::string进行操作,这样就不会出现内存溢出
  • 即使动态分配数百个对象,std::string是否适合作为成员参数

    • 您的问题有点难解析,我认为示例代码会让解析变得更容易。假设您有一个包含字符串的类,这样做对吗:

      class foo {
        public:
          std::string str;
      };
      
      您想知道字符串的大小是如何调整的?让我试着解释一下:
      foo类对象的大小是固定的。字符串成员的大小也是固定的,但它在实现中包含一个指向附加动态内存(其他地方)的指针,该内存根据字符串的内容而增长或收缩。std::string的实现为您解决了这一问题,您不必担心。也不会出现任何内存溢出-例如,字符串的内存块与foo对象使用的内存块不同。

      谢谢您的评论。你很理解我的问题,并且回答了。我理解这一点,我明白了,我不必担心调整std::字符串的大小。我将此答案标记为可接受答案,并添加+1。