cdu*_*001 10 c++ move binary-compatibility c++11
如果我将移动构造函数(或移动赋值运算符)添加到我的库中,我是否会破坏二进制兼容性?这种添加能否以任何方式破坏用户的代码?
class Foo {
public:
Foo();
Foo(Foo const&);
Foo& operator=(Foo const&);
// new methods:
Foo(Foo&&);
Foo& operator=(Foo&&);
};
Run Code Online (Sandbox Code Playgroud)
在我看来,只要不添加成员或虚拟函数,就不会对二进制兼容性产生任何影响,因为对象的布局不会改变。
如果一个组件(例如.dllWindows 或.soLinux 上的共享库)使用旧版本的库,那么它将复制该对象的所有实例(甚至右值),无论它是否是由使用新库的组件创建的(并且反之亦然)。
只要使用移动语义来提高性能,并且因此生成的移动对象的行为与复制的对象相同,就不会有问题。唯一的区别是由于对内存[解除]分配和复制等的调用减少而导致性能提高。如果移动操作用于产生不同的语义(移动的对象与复制的对象不同),那么所有的赌注都会被取消,但我认为没有人会故意这样做(也许除了工作安全)。
只要对象的二进制布局不改变,我就看不出如何引入任何破坏。
| 归档时间: |
|
| 查看次数: |
403 次 |
| 最近记录: |