【发布时间】:2015-08-18 19:28:23
【问题描述】:
考虑以下情况:
#include <iostream>
using namespace std;
class A {
public:
int y;
A(int &x) {
x = 2;
y = 1;
}
};
class B : public A {
public:
int *p;
B(int t) : A(*p) {}
};
int main() {
B b(2);
return 0;
}
调用B的构造函数时,p有一个垃圾值。所以,当*p 被传递给A() 时,它给了我一个分段错误。我想在调用A(*p) 之前初始化p = new int; - 这可能吗?
编辑:有趣的是,不带参数调用B 的构造函数并没有给出分段错误。
【问题讨论】:
-
您必须使用
int*p从类(在 A 之前)继承才能做到这一点。 -
这段代码不会给你一个分段错误。
-
我认为这是一个玩具示例,这就是为什么
B::p是int*而不仅仅是int。 -
@T.C.我做了一个编辑,现在这段代码给出了 Segmentation Fault。
-
一般来说,需要这样做是不良类设计的标志;看看您是否可以重新设计您的类层次结构,以便在基础构造期间基不必实际修改派生中的数据。
标签: c++ pointers inheritance constructor