Osc*_*car 22 c++ memory stdstring
我有一个简单的问题.我想知道std::string每次在C++中是否分配内存.
在我的代码中,似乎构造函数将使用更多的内存来构造而tst_first_string不是tst_second_string:
char* first_string = new char[5];
strcpy(first_string, "test");
std::string tst_first_string(first_string);
std::string tst_second_string("test");
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 21
双方tst_first_string并tst_second_string会使用构造函数构造const char*.由于nul-terminator 之前的字符数在两种情况下都是相同的,因此您可以想象构造将完全相同.这就是说C++标准对于内存管理必须发生的事情是故意模糊的,所以你不会绝对肯定地知道.
还要注意,许多std::string实现利用短字符串优化技术来处理小字符串,这会导致整个对象以自动存储持续时间写入内存.在您的情况下,可能根本不使用动态内存.
我们确实知道的是,从C++ 11开始,std::string不再允许复制写入语义,因此将创建两个不同的字符串.