具有有效vtable的C ++ new运算符,无需调用构造函数

时间:2014-07-09 18:28:23

标签: c++ constructor malloc virtual vtable

是否可以在堆上创建类的实例而无需调用默认构造函数并使用有效的vtable进行继承?让我演示一下我想做什么:

class A
{
  protected: virtual void _fake_static_method()
  {

  }
};

class B1 : public A
{
  protected: virtual void _fake_static_method()
  {
    std::cout << "Hello";
  }

  public: static void run_fake_static_method()
  {
    B1* dummy = static_cast<B1*>(::operator new(sizeof(B1)));
    dummy->_fake_static_method();
    free(dummy);
  }
}

class B2 : public A
{
  public: static void run_fake_static_method()
  {
    B2* dummy = static_cast<B2*>(::operator new(sizeof(B2)));
    dummy->_fake_static_method();
    free(dummy);
  }
}

这里我想从示例B1::run_fake_static_method()中调用静态方法。在该方法中,我想运行一个成员方法,但我不想调用默认的构造函数。我需要这样的实现来删除虚拟方法而不会在其他错误中编译错误。就像“虚拟静态方法”一样​​,我希望你明白我想做什么。

我有什么特别的技巧可以让它发挥作用吗? :)

0 个答案:

没有答案