c++ - 将 std::vector 分配给方法内的指针

标签 c++ c++11 pointers stdvector lifetime

我想创建一个方法,它使用 std::vector 来构建数据集合,然后对数据进行一些操作,最后,我想将生成的信息传递给给定参数的指针,如以下小示例所示:

struct MyStruct
{
    int* list;
    int entry_count;
};




static MyStruct createList()
{
   vector<int> vectorList;
   MyStruct data;

   vectorList.push_back(1);
   vectorList.push_back(1);
   vectorList.push_back(1);
   vectorList.push_back(1);
   vectorList.push_back(1);

   data.list = &vectorList.front();
   data.entry_count = vectorList.size();
   return data;
}

int main(int argc, char** argv)
{
   MyStruct data;
   data = createList();

   return 1;
}

问题是,方法关闭后, vector 被销毁,指针无处显示。

我怎样才能以正确的方式处理这个问题?那么如何才能将此集合分配给指针而不取消分配呢?

最佳答案

您需要将函数设为本地vectorList静态并使用std::vector::data用于通过指针获取底层数组。

void createList(int* list)
{
   static std::vector<int> vectorList;
   // ...
   list = vectorList.data();
}

但是,这使得 vectorList 成为所有 createList 函数调用中的唯一实例。如果您需要不同的 vectorList 来进行不同的函数调用,我建议将所有内容包装到一个类中。

#include <vector>

class MyList /* final */
{
   std::vector<int> mVectorList;

public:
   // operations via functions

   int* data() /* const noexcept */  // ---> provide a member to acces the underlying data
   {
      return mVectorList.data();
   }
};

关于c++ - 将 std::vector 分配给方法内的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62847030/

相关文章:

c - 为什么带星号和不带星号的指针变量在 printf 中表现不同?

C++ 加密内存中的变量

c++ - 为什么要定义一个返回结构的 lambda 函数而不是直接定义结构?

c++ - STL Vector是否默认使用 'new'和 'delete'进行内存分配?

c++ - std::unique_ptr ostream 插入器

c++ - 数组指针,(*ptr)[] 和 *ptr[] 有什么区别

c++ - 将文本文件解析为对象时的错误处理

c++ - 基于共享内存的聊天应用程序的问题

c++ - 将 Eigen 矩阵转换为 c 数组以便我可以使用 gsl 的性能有效方法是什么

c++ - std::array<char, size> null 是否终止?