c ++存储对象的类型,更好的选择是什么?

Vla*_*irS 5 c++

没有RTTI和虚函数.

我遇到了两种不同的常见解决方案来提供对象的类型:

使用虚方法调用并在方法中保留id:

class Base {
 public:
 virtual ~Base();
 virtual int getType() const =0;
};
class Derived : public Base {
 public:
 virtual int getType() const { return DerivedID; }
};
Run Code Online (Sandbox Code Playgroud)

使用内联方法调用并在基类中保留id:

class Base {
 int id_;
 public:
 virtual ~Base();
 inline int getType() const { return id_; }
};

class Derived : public Base {
 public:
  Derived() { id_=DerivedID;}
};
Run Code Online (Sandbox Code Playgroud)

一般来说什么是更好的选择,它们的利弊是什么?

Mar*_*som 1

如果您选择在每个派生类中都带有 ID 的第二个选项,则您创建的每个对象中都会有一个额外的成员。如果您使用虚函数的第一个选项,则虚函数表中将有一个额外的指针,该指针每个类仅存在一次,而不是每个对象。如果类将具有多个虚函数,则第一个选项显然更好。即使不是,我认为它更符合人们的期望。