C++11 如果我不';不要叫普什你回来?

C++11 如果我不';不要叫普什你回来?,c++11,memory-management,C++11,Memory Management,我正在使用一个函数,该函数将表单的结构数组作为输入 struct Info { const char* something; // more stuff }; 因为我不想担心清理char*中的内存,所以我的想法是 创建所有内容的std::vector 使用std::vector::c_str() 将结构馈送到函数 这样向量就拥有了所有的字符串,我就不用担心内存管理了。我唯一担心的是,向量可能会决定在某个点移动内存中的字符串,这将使我从c_str()获得的指针无效 所以我的问题是:假设我

我正在使用一个函数,该函数将表单的结构数组作为输入

struct Info
{
  const char* something;
  // more stuff
};
因为我不想担心清理
char*
中的内存,所以我的想法是

  • 创建所有
    内容的
    std::vector
  • 使用
    std::vector::c_str()
  • 将结构馈送到函数
  • 这样向量就拥有了所有的字符串,我就不用担心内存管理了。我唯一担心的是,向量可能会决定在某个点移动内存中的字符串,这将使我从
    c_str()
    获得的指针无效


    所以我的问题是:假设我没有向向量添加任何东西,我能指望指针保持在原来的位置吗?作为奖励,假设我之前调用了
    reserve
    ,那么我可以将步骤1和步骤2组合成一个循环,这样向量就不必移动吗?

    是的,只要你不接触向量,它就不会在你身上自发地改变;即使钟敲十二点也不行。是的,只要不超过其容量,向量保证不会重新分配
    push_back
    上的现有元素或使其无效;因此,
    reserve
    方法会起作用。如果有引用,我会接受这个答案。[vector.modifiers]/1会在新容量大于旧容量时导致重新分配。如果没有重新分配,那么插入点之前的所有迭代器和引用都将保持有效。是的,只要你不接触向量,它就不会在你身上自动改变;即使钟敲十二点也不行。是的,只要不超过其容量,向量保证不会重新分配
    push_back
    上的现有元素或使其无效;因此,
    reserve
    方法会起作用。如果有引用,我会接受这个答案。[vector.modifiers]/1会在新容量大于旧容量时导致重新分配。如果没有重新分配,则插入点之前的所有迭代器和引用都保持有效。