根据引用:
1. std::vector::swap 交换内容;
2. 复制字符串很深。
但是如何交换函数返回的字符串数组呢?
我的猜测是,该函数返回内部字符串的拷贝。所以交换应该没问题。但是,在 visual studio 中调试时,内部字符串和外部字符串(交换后)在 raw_view 中具有相同的内存地址,所以我怀疑我的猜测。
谢谢。
std::vector<std::string> get_name_list()
{
std::string name1 = "foo";
std::string name2 = "bar";
std::vector<std::string> names;
names.push_back(name1);
names.push_back(name2);
return names;
}
void main()
{
std::vector<std::string> list;
list.swap(get_name_list()); // deep copy strings? or access local memory?
}
最佳答案
一般来说,按值传递和返回可以避免内存泄漏,当然,所涉及的类型可能仍有错误的内存管理。这不应该是标准库容器和 std::string
的情况。
您的代码中没有内存泄漏[编辑:假设它编译,也就是说;您可以通过将其更改为 get_name_list().swap(list)
来使其编译。] 交换两个 vector 不会复制或移动 vector 的元素。您可以想象这两个 vector 指向其内部数据数组的指针被简单地交换,将对象本身留在原地。
关于c++ - 如果函数返回 std::vector<std::string> 是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29790364/