gpt4 book ai didi

C++在访问持有该成员的对象时无法访问对象成员

转载 作者:行者123 更新时间:2023-11-28 03:24:03 24 4
gpt4 key购买 nike

我有以下代码片段:

A.h

include B.h

class A
{
public:
void createB();
B* getB();
private:
B *b;
};

A.cpp

void A::createB()
{
b = new B();
}

B* A::getB()
{
return b;
}

Main.cpp

int main()
{
int n = 3;

A *a_array = new A[n];

for ( int i = 0; i < n; i++ ) {

A *a = new A();

a_array[i] = *a;
}

for ( int i = 0; i < n; i++ ) {

A a = a_array[i];

a.createB();
}

a_array[0].doStuff(); // OK

a_array[0].getB(); // returns NULL
}

Output:

A created
A created
A created
B created
A destroyed
B created
A destroyed
B created
A destroyed

似乎A对象在循环中被销毁了,但我可以在没有循环的情况下访问它们,但无法访问A的对象成员。

最佳答案

问题在于,在第二个循环中,您对数组 a_array 中相应元素的拷贝调用了 createB。尝试将循环更改为:

for ( int i = 0; i < n; i++ ) {

A& a = a_array[i];

a.createB();
}

另请注意,您的程序中存在大量内存泄漏 - 您分配了很多从未释放的东西。

在第一个循环中,在将 a 分配给数组中的元素之前不需要动态分配它。简单地做(正如皮特·贝克尔所指出的):

for ( int i = 0; i < n; i++ ) {
a_array[i] = A();
}

关于C++在访问持有该成员的对象时无法访问对象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14624504/

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