首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vtable和*_vptr创建时间

Vtable和*_vptr创建时间
EN

Stack Overflow用户
提问于 2014-08-23 05:31:28
回答 1查看 149关注 0票数 1

Vtable和*_vptr是由编译器在编译时创建的.编译器何时创建它,在执行构造函数代码之前或之后,还是在为类的对象分配内存之前或之后?

我想要弄清楚为什么虚拟构造函数是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-23 05:48:02

虚拟构造函数的不存在与vtable/vptr的创建过程无关。事实上,vtable概念本身就是一个实现细节(如何/如果使用vtable是如何定义的)

现在,虚拟构造函数会做什么?当动态类型与静态类型不同时,虚拟成员函数的本质是提供动态多态。

但是构造函数知道对象的静态类型,并且它必须是实际(此)对象的类型:这里不涉及任何动态行为。

注:

有一些设计模式,比如虚拟构造器模式,允许您动态地克隆对象,如果这正是您真正想要的:

代码语言:javascript
复制
class Shape {
public:
  virtual ~Shape() { }                 // A virtual destructor
  virtual void draw() = 0;             // A pure virtual function
  virtual void move() = 0;
  ...
  virtual Shape* clone()  const = 0;   // Uses the copy constructor
  virtual Shape* create() const = 0;   // Uses the default constructor
};

class Circle : public Shape {
public:
  Circle* clone()  const;   // Covariant Return Types; see below
  Circle* create() const;   // Covariant Return Types; see below
  ...
};

Circle* Circle::clone()  const { return new Circle(*this); }
Circle* Circle::create() const { return new Circle();      }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25458788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档