gpt4 book ai didi

c++ - 结构体(位于堆上)的 getter 和 setter 是什么样子的?

转载 作者:太空狗 更新时间:2023-10-29 23:07:09 26 4
gpt4 key购买 nike

非常简单的问题 - 如何访问位于堆内的结构的数据?

附加信息::我有一个名为“A”的类和一个名为“B”的类中的结构。创建的每个“B”都将存在于堆中。 “A”类旨在将“B”的 vector 作为私有(private)数据成员(即,“A”类可以包含许多“B”)。我在类“A”中有一个方法,它将在“A”具有的 vector 中添加另一个新的“B”实例。我在类“A”中还有另一种方法,它将更新“B”实例 vector 中的每个元素。我的问题是:

如何在我的结构中使用 getter 和 setter?

下面是一些可能有用的代码(注意:grafix.h 是一个图形库)

//.h file
#pragma once
#include <vector>
#include "grafix.h"

class A
{
public:
~A();
A();

void addB();
void updateB();

private:

struct B
{
public:
~B()
{
delete p_b;
p_b = 0;
}

B()
{
p_b = new B; //I need this here

p_ball->x = 0;
p_ball->y = 0;
p_ball->r = 15;

}
void setxy(int X, int Y)
{
//What does this look like?
//This?
x = X; //?
y = Y;
}

int retx()
{
//Likewise.... ?
return x; //?
}


int rety()
{
return y;
}

void update()
{
draw();

//Movement code taken out for time being
}

private:
int x,y; //xy
int r; //radius


B* p_b; //pointer to object, do I need this?

void draw()
{
draw_circle_filled(x,y,r);
//how can I access the data within the struct B here?
//do I use the getters/setters? dereference??
}

};

vector <Ball*> bs; //Holds all of the B's that have been created

};

然后是包含方法的 .cpp 文件。这就是我的问题所在,我输入的语法是否正确??

#include "A.h"

A::A()
{
addB();
}

void A::addB()
{
B* b;

bs.push_back(b);
}

void A::updateB()
{
for(int i = 0; i < bs.size(); i++)
{
bs[i]->update();
}
}

最佳答案

这是犯罪:

void A::addB()
{
B* b;

bs.push_back(b);
}

B* b 未初始化。在你的容器中引用它是犯罪行为:取消引用这个地址没有意义并且是未定义的行为/崩溃。

你应该这样分配:

{
B* b = new B;

bs.push_back(b);
}

编辑:正如凯文在下面评论的那样,仍然存在内存泄漏。您宁愿使用 std::shared_ptr<B> 的容器.这样,当没有人保持指向它的 shared_ptr 时,B 对象将被删除。

关于c++ - 结构体(位于堆上)的 getter 和 setter 是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463838/

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