拷贝构造函数与移动构造函数

简介: 拷贝构造函数与移动构造函数

拷贝构造函数与移动构造函数的区别

拷贝构造函数的形参是一个左值引用

拷贝构造函数完成的是整个对象或变量的拷贝

移动构造函数的形参是一个右值引用

移动构造函数是生成一个指针指向源对象或变量的地址,接管源对象的内存,相对于大量数据的拷贝节省时间和内存空间。

参考

C++11–移动构造函数

拷贝构造函数与移动构造函数

Test(Test&& T):m_ptr(T.m_ptr)  {
  T.m_ptr = nullptr;
  cout << "移动拷贝构造" << endl;
}
Test(const Test& T){
  m_ptr=new int;
  *m_ptr=*T.m_ptr;
  cout << "常引用深拷贝构造" << endl;
}
Test(Test& T){
  m_ptr=T.m_ptr;//error
  cout << "浅拷贝构造" << endl;
}
~Test(){
  delete m_ptr;
}


第三个之所以不能用是应该第一个析构把T.m_ptr delete了,第二次析构m_ptr时,这两个指针指向同一个地址了,所以err



目录
相关文章
|
Linux 编译器 C++
C/C++性能优化:从根本上消除拷贝操作的浪费
C/C++性能优化:从根本上消除拷贝操作的浪费
1497 1
|
C++
C++ E0167 “const wchar_t *“ 类型的实参与 “BSTR“ 类型的形参不兼容
C++ E0167 “const wchar_t *“ 类型的实参与 “BSTR“ 类型的形参不兼容
218 0
|
5月前
|
存储 人工智能 自然语言处理
Cursor这类编程Agent软件的模型架构与工作流程
编程Agent的核心是一个强大的大语言模型,负责理解用户意图并生成相应的代码和解决方案。这些模型通过海量文本和代码数据的训练,掌握了广泛的编程知识和语言理解能力。
445 1
|
数据安全/隐私保护 C++
C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造
C++中的构造函数是特殊成员函数,用于对象初始化。类型包括默认构造函数(无参数)、带参数构造函数、拷贝构造函数和移动构造函数。默认构造函数设置对象默认状态,带参数构造函数允许传递初始化值。拷贝构造函数复制已有对象,移动构造函数高效转移资源。构造函数的访问权限可控制为public、private或protected。理解构造函数有助于编写健壮的C++代码。关注公众号`Let us Coding`获取更多内容。
283 0
|
10月前
|
存储 算法 C++
【C++】unordered_map(set)
C++中的`unordered`容器(如`std::unordered_set`、`std::unordered_map`)基于哈希表实现,提供高效的查找、插入和删除操作。哈希表通过哈希函数将元素映射到特定的“桶”中,每个桶可存储一个或多个元素,以处理哈希冲突。主要组成部分包括哈希表、哈希函数、冲突处理机制、负载因子和再散列,以及迭代器。哈希函数用于计算元素的哈希值,冲突通过开链法解决,负载因子控制哈希表的扩展。迭代器支持遍历容器中的元素。`unordered_map`和`unordered_set`的插入、查找和删除操作在理想情况下时间复杂度为O(1),但在冲突较多时可能退化为O(n)。
181 5
|
安全 数据挖掘 Java
C++ 完美转发深度解析:从入门到精通
C++ 完美转发深度解析:从入门到精通
832 1
|
11月前
|
Java Maven Spring
查看springboot版本支持最高的java版本
截至最近更新,Spring Boot 3.0及以上版本支持的最高Java版本为Java 17。鉴于技术的不断演进,建议直接参考Spring Boot的官方文档获取最准确的支持信息,因为这些版本兼容性可能会随着新版本的发布而有所变化。选择与你的Spring Boot版本相匹配的Java版本,可以确保充分利用框架特性,同时保证项目的稳定性和前瞻性。
647 0
|
Linux
如何让linux显示器命令行界面不显示
若需在命令行界面快速关闭屏幕,可选方法包括:使用`setterm --blank force`立即关闭屏幕;利用`sudo vbetool dpms off`将显示器置于低功耗模式;在X server环境下执行`xset dpms force off`关闭屏幕;或是针对笔记本通过`echo 0 | sudo tee /sys/class/backlight/*/brightness`关闭背光。以上任一方法均可实现屏幕关闭,部分操作需要管理员权限,屏幕通常会在按键或移动鼠标后自动恢复。
1304 10
|
存储 缓存 算法
一篇文章让你学会什么是哈希(上)
哈希概念 哈希在C++中有广泛的应用,它是一种用于快速查找和存储数据的数据结构和算法。以下是一些常见的哈希在C++中的应用: 哈希表(Hash Table):哈希表是一种高效的数据结构,用于存储键值对。在C++中,std::unordered_map 和 std::unordered_set 是标准库提供的哈希表实现。
|
编译器 C++
简述构造函数、拷贝构造函数、深拷贝浅拷贝、析构函数
简述构造函数、拷贝构造函数、深拷贝浅拷贝、析构函数