按设计,std::mutex不可移动也不可复制.这意味着A拥有互斥锁的类不会接收default-move-constructor.
如何A以线程安全的方式使这种类型移动?
我基本上会写下面这段代码.我明白为什么它无法编译.
A instance; // A is a non-default-constructable type and therefore can't be allocated like this
if (something)
{
instance = A("foo"); // use a constructor X
}
else
{
instance = A(42); // use *another* constructor Y
}
instance.do_something();
Run Code Online (Sandbox Code Playgroud)
有没有办法在不涉及堆分配的情况下实现此行为?
我正在编写一个应该绝对没有开销的委托库。因此,尽可能快地访问函数指针很重要。
所以我的问题是:访问速度是否取决于班级中的成员位置?我听说最重要的成员应该是成员声明中的第一个成员,这对我来说很有意义,因为这意味着this类的指针指向与重要成员相同的地址(假设是非虚拟类)。而如果重要成员将在任何其他位置,CPU 将不得不通过添加this和类布局中的偏移量来计算它的位置。
另一方面,我知道编译器将该地址表示为 a qword-ptr,其中包含偏移量的信息。
所以我的问题归结为:解决 a 是否qword-ptr需要一个恒定的时间,或者如果偏移量不是,它会增加0吗?行为在不同平台上是否保持相同?
c++ performance micro-optimization class-members addressing-mode
我想为我的类使用抽象基类.这些抽象类将用于接口的目的..它们仅作为自我检查以确保实现所有必需的成员.这加速了开发.由于错误消息比从模板生成的onces更清晰.
由于我将在模板中使用实现类,因此在发布版本中不需要基类本身.实际上,它只会引入开销,即使它很小.
是否有一些预处理器魔术允许我仅在定义调试符号时才从这些抽象接口类继承?