我有以下星座:
class base {...};
class derived : public base
{
public:
unsigned int* a;
derived(size_t num = 1) : a(0), _b(0)
{
a = new unsigned int[num];
_b = new unsigned char[num];
}
private:
unsigned char* _b;
}
这样做很好:
derived* instance = new derived();
但这样做:
base* instance = new derived();
当我尝试使用_b时,_b保持为0x0并且出现错误。
这里发生了什么?
更新
问题是由Windows / Linux跨平台问题引起的 - 值填充了错误的指针。
答案 0 :(得分:2)
第一:
为什么需要两次初始化a
和b
?仅使用显式初始化,或仅使用标准成员初始化...
derived(size_t num = 1) : a(new unsigned int[num]),
_b(new unsigned char[num])
{
}
这应该可以解决问题。
第二:如果你在derived
中创建base
的实例,那么派生的所有成员和函数都将是无用的。除了base的成员和函数,这在两个类中都很常见。