c++ - 如果函数返回 std::vector<std::string> 是否存在内存泄漏?

标签 c++ string memory vector swap

根据引用: 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/

相关文章:

c++ - 在 WP8 项目中调试 C++ 运行时组件

Java 字符串。用其他字符列表替换字符列表

string - 计算方程但忽略数学运算和括号的顺序

python - 在python中集成多个字典(大数据)

python - 如何在 Python 中使用 psutil 获取程序的最大内存使用量

c++ - 在 CMake 中使用预编译的头文件

c++ - 如果语句位于cout行中,是否有办法?

c++ - 在 Mac 上编译 C++ 代码时处理 “dyld: lazy symbol binding failed: Symbol not found” 错误

java - 如何将字符串拆分为标记?

java - 运行时堆栈内存