C++标准库中是否存在有拷贝构造函数但无移动构造函数的类型?
C++标准库中存在定义拷贝构造但无移动构造的类型
是的,这类类型确实存在,主要分为两种情况:
- 类显式定义了拷贝构造函数,根据C++11及以后的规则,编译器会自动删除隐式的移动构造函数,导致类型仅支持拷贝、不支持移动;
- 类的设计意图就是保留拷贝语义、禁止移动操作。
早期C标准库中的部分旧类型(比如std::valarray在C11初期的实现)就属于这类:它们只定义了拷贝构造,没有添加移动构造函数,因此无法进行移动操作。不过现代标准库实现中,很多这类旧类型都已经补充了移动构造以优化性能,但从标准规范的角度,确实存在允许拷贝但不支持移动的类型。
另外,还有一些特殊场景下的标准库类型,比如某些用于管理资源的辅助类,出于设计考量仅开放拷贝语义,不提供移动构造。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

