是否总是需要从堆中分配内存以促进动态多态?到目前为止我遇到的所有例子都指向相同的例子.在实时编程中通常可以避免动态内存分配.因此,使用堆栈进行动态多态性是否有任何缺点,如下面的代码所示.
class Base
{
public:
virtual void Display()= 0;
};
class Derived:public Base
{
public:
void Display()
{
cout << "In derived" << endl;
}
};
int main()
{
Base* base;
Derived derived1;
base = &derived1;
base->Foo();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一个更好的例子是:
void func(Base &base);
int main()
{
Derived derived;
func(derived);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
多态的使用不必靠近堆栈上创建对象的位置.
这些天我们的很多单元测试代码大致如下:
void test()
{
MockObject mockObj;
RealObject objectToBeTested(mockObj);
// Do tests
}
Run Code Online (Sandbox Code Playgroud)
这很大程度上取决于多态性,但在堆栈上创建对象.