gpt4 book ai didi

c++ - 如何避免动态分配内存 C++

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:24 24 4
gpt4 key购买 nike

[edit] 在这个 get 方法之外(见下文),我想要一个指针 double * result; 然后调用 get 方法,即

    // Pull results out
int story = 3;
double * data;
int len;
m_Scene->GetSectionStoryGrid_m(story, data, len);

话虽如此,我想要一个 get 方法,它只是通过引用设置结果 (*&data),而不是动态分配内存。

我正在寻找的结果已经存在于内存中,但它们在 C 结构中,而不是在一个连续的内存块中。仅供引用, &len 只是数组的长度。我想要一个包含所有结果的大数组。

因为我正在寻找的实际结果存储在 native C 结构指针 story_ptr->int_hv[i].ab.center.x; 中。我如何避免像上面那样动态分配内存?我想将数据*指向结果,但我不知道该怎么做。这可能是我忽略的一些简单的事情……代码如下。

这可能吗?据我所知,它不是,但正如我的用户名所暗示的那样,我不是软件开发人员。感谢到目前为止所有回复的人!

这是一段代码:

void GetSectionStoryGrid_m( int story_number, double *&data, int &len )
{

std::stringstream LogMessage;

if (!ValidateStoryNumber(story_number))
{
data = NULL;
len = -1;
}
else
{
// Check to see if we already retrieved this result
if ( m_dStoryNum_To_GridMap_m.find(story_number) == m_dStoryNum_To_GridMap_m.end() )
{
data = new double[GetSectionNumInternalHazardVolumes()*3];
len = GetSectionNumInternalHazardVolumes()*3;

Story * story_ptr = m_StoriesInSection.at(story_number-1);
int counter = 0; // counts the current int hv number we are on

for ( int i = 0; i < GetSectionNumInternalHazardVolumes() && story_ptr->int_hv != NULL; i++ )
{
data[0 + counter] = story_ptr->int_hv[i].ab.center.x;
data[1 + counter] = story_ptr->int_hv[i].ab.center.y;
data[2 + counter] = story_ptr->int_hv[i].ab.center.z;

m_dStoryNum_To_GridMap_m.insert( std::pair<int, double*>(story_number,data));

counter += 3;
}
}
else
{
data = m_dStoryNum_To_GridMap_m.find(story_number)->second;
len = GetSectionNumInternalHazardVolumes()*3;
}
}
}

最佳答案

考虑返回自定义访问器类而不是“double *&data”。根据您的需要,该类看起来像这样:

class StoryGrid {
public:
StoryGrid(int story_index):m_storyIndex(story_index) {
m_storyPtr = m_StoriesInSection.at(story_index-1);
}
inline int length() { return GetSectionNumInternalHazardVolumes()*3; }

double &operator[](int index) {
int i = index / 3;
int axis = index % 3;
switch(axis){
case 0: return m_storyPtr->int_hv[i].ab.center.x;
case 1: return m_storyPtr->int_hv[i].ab.center.y;
case 2: return m_storyPtr->int_hv[i].ab.center.z;
}
}
};

对于任何语法问题,我们深表歉意,但您明白了。返回对此的引用并将其记录在您的 map 中。如果正确完成映射,然后管理所需的所有动态分配。

关于c++ - 如何避免动态分配内存 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20550915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com