作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望类 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/
我是一名优秀的程序员,十分优秀!