在STL中使用memcpy

Cla*_*bel 0 c++ stl

为什么C++的vector类调用copy构造函数?为什么不只是记忆基础数据?这不是更快,并删除移动语义的一半需求?

我无法想象这会更糟糕的用例,但话又说回来,也许只是因为我很缺乏想象力.

Bil*_*eal 13

因为需要通知对象它正被移动.例如,可能存在指向需要修复的给定对象的指针,因为正在复制对象.或者可能需要更新引用计数智能指针的引用计数.要么....

如果你只是记忆了底层内存,那么你最终会在同一个对象上调用两次析构函数,这也很糟糕.如果析构函数控制类似OS文件句柄的内容怎么办?

编辑:总结以上内容:复制构造函数和析构函数可能有副作用.这些副作用需要保留.

  • 你记住了这个对象.现在有两份副本.需要在两者上调用析构函数. (2认同)