控制类成员布局和析构函数顺序

问题描述 投票:0回答:1

我的班级有两名成员。

class C {
    typeA a;
    typeB b;
};

假设没有继承。这堂课我担心三件事。

  1. 调用
    a
    b
    的构造函数的顺序
  2. 调用
    a
    b
    的析构函数的顺序
  3. a
    b
    在内存中的布局

我可能关心(1)和(2)的一个原因是线程同步。我可能关心的一些原因 (3) 是:

  1. 填充

  2. 具有两个以上班级成员的空间局部性

  3. 第一个类成员的内存偏移量为0

我希望能够同时控制(1)-(3)。然而,似乎当我选择内存中的顺序时,我也选择了构造函数和析构函数的顺序。有没有办法同时控制(1)-(3)?

c++ class constructor destructor micro-optimization
1个回答
0
投票

是的。像这样拼写每个成员:

union {typeA a;};

这可以防止它们自动构造和销毁,从而允许您手动执行此操作(

::new((void *)&a) typeA();
用于构造,
a.~typeA();
用于销毁)。

强制提醒,如果启用了异常并且其中一个构造函数抛出异常,则只需销毁已构造的成员。

© www.soinside.com 2019 - 2024. All rights reserved.