【发布时间】:2015-04-17 01:37:52
【问题描述】:
假设我有 base.h 类
#ifndef BASE_H
#define BASE_H
class base
{
public:
base(){}
virtual void id() const{ std::cout << "base\n"; }
virtual ~base(){}
protected:
private:
};
#endif // BASE_H
以及派生的.h 类
#ifndef DERIVED_H
#define DERIVED_H
#include <base.h>
class derived : public base
{
public:
derived(){}
void id() const{ std::cout << "derived\n"; }
protected:
private:
};
#endif // DERIVED_H
我开始在主代码中测试不同的结果
int main()
{
base* bas;
derived* der;
base statbas;
derived statder;
*bas = statbas; // here it crashes
bas = new base;
*bas=statbas; // here it works. It also worked with bas=&statbas;
bas->id();
return 0;
}
看来我需要为指针bas分配一些内存,否则程序会崩溃。这件事让我很困惑,主要是因为我无法想象为没有任何变量的对象(在这种情况下为bas)存储内存(类库仅由函数形成)。
另一件事让我感到困惑,显然*bas=statbas(bas 指向 statbas)和bas=&statbas(bas 具有 statbas 的内存地址)不相等,实际上第一个使程序崩溃,而第二个工作.
我假设所有这些问题都与基类中的虚拟函数有关,事实上,当 id() 未声明为虚拟时,程序不会崩溃(但显然也无法正常工作)。
有人可以澄清一下在这种情况下如何管理内存吗?
【问题讨论】:
-
您的问题与虚函数有关。确保您首先了解指针的工作原理。
-
并且以防万一您弄错了“静态”变量是什么(我从变量名猜测)。在函数范围内声明的变量不是静态的
-
我知道静态变量是其他东西,我只需要一个名字
标签: c++ inheritance memory-management virtual