gpt4 book ai didi

c++ - B类中的A类初始化包含指向A类的指针

转载 作者:行者123 更新时间:2023-11-30 00:38:34 25 4
gpt4 key购买 nike

我希望类 A 包含一些数据,而类 B 将包含指向该数据的指针。我通过返回对数据对象 A 的引用的函数提供对数据的访问。如果我创建对象 B,则我可以访问对象 A,但是如果创建指向 B 的指针,则等效操作会产生段错误。像这样:

#include <iostream>
#include <vector>

class A {
public:
A(const int pInt) {mInt = pInt;}
void print() {std::cout << mInt << std::endl;}
private:
int mInt; //some data
};

class B {
public:
B() {mP1 = new A(1);} //initialise to 1
~B() {delete mP1;}
A& access() {return *mP1;} //return reference to the data

private:
A* mP1; //pointer to some data
};

int main() {
B vB;
vB.access().print(); //this works.

B *vBptr;
vBptr->access().print(); //Segmentation fault!

std::vector<B*> vVec;
vVec.resize(1);
vVec[0]->access().print(); //Segmentation fault!
}

我想当创建 B *vBptr 时 B 对象没有被初始化?那么我如何创建指向自动初始化的 B 对象的指针 vector ?

干杯。

最佳答案

你需要初始化指针:

B *vBptr = new B;
vBptr->access().print();

同样适用于您的 vector - 您必须遍历元素并初始化它们。

for ( int i = 0 ; i < vVec.size() ; i++ )
vVec[i] = new B;

请注意,您必须手动释放内存:

delete vBptr;

for ( int i = 0 ; i < vVec.size() ; i++ )
delete vVec[i];

不要遇到内存泄漏。

关于c++ - B类中的A类初始化包含指向A类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400802/

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