C++ 深拷贝和浅拷贝

news/2024/11/22 13:07:17/

深拷贝和浅拷贝的区别

         浅拷贝:当编写一个类时,并且没有添加拷贝构造,此时系统会默认添加一个拷贝构造(浅拷贝)。浅拷贝是指:创建一个新对象时,把对象的初始属性都复制一份,若是存在引用类型,则拷贝的是其内存地址,当它的值发生改变时,另一个的值也会受到改变。

值得注意的是:如果存在析构函数,则会出现指针悬挂的问题。

        深拷贝:深拷贝就是将对象从内存中完全拷贝出来,并且重新开辟一片空间来进行存放,当其中一个值发生改变时并不会影响另一个的值,两者互不影响。
 

浅拷贝示例:

#include <iostream>
using namespace std;
class My_pre
{
    private:
            int num;
    public:
            My_pre(int a)
            {
                num = a;
            }
            void vic()
            {
                cout << num << endl;
            }
            ~My_pre()
            {
                cout << "析构函数" << endl;
            }
 
};
int main(int argc, char *argv[])
{
    My_pre p1(10);
    My_pre p2(p1);
    p2.vic();
    return 0;
}

深拷贝示例:

#include <iostream>
using namespace std;
class My_pre
{
    private:
            int* data;
            int num;
    public:
            My_pre(){};
            My_pre(int m_num): num(m_num)
            {
                data = new int[num];
            }
            My_pre(const My_pre& _pre):num(_pre.num)
            {
                data = new int[num];//深拷贝
            }
            ~My_pre()
            {
                delete [] data;
                cout << "析构函数" << endl;
            }
 
};
int main(int argc, char *argv[])
{
    My_pre p1(10);
    My_pre p2 = p1;
    return 0;
}


http://www.ppmy.cn/news/740699.html

相关文章

10Mbps以太网的帧长度

1.以太网帧的最短长度为64字节&#xff0c;或者帧中的数据不得少于46个字节,其中以太网帧头有18字节(以太网2的值为:MAC2类型4CRC,注意,如果是802.3的规范,它支持SNAP和802.3以太,其中的2个字节的类型字段就变为帧的长度),小于以上长度的帧或数据需要在帧中加入“填充数据(pad)…

802.11速率详解

0、序 802.11协议发展过程中定义了很多种速率&#xff0c;比如1mbps/65mbps等等&#xff0c;不同协议版本的速率都有差异&#xff0c;这些速率数值都是怎么计算出来的&#xff1f;芯片在发送数据的时候到底该选择什么速率来发送呢&#xff1f;本次先探讨前半部分&#xff0c;下…

电信10兆指的是多少Mbps

一般电信10兆&#xff08;10Mbps&#xff09;指的是&#xff1a;下载速度最大在1.25MB/s 1Mbps&#xff08;兆位/秒&#xff09; 0.125MB/S&#xff08;兆字节/秒&#xff09; 8Mbps&#xff08;兆位/秒&#xff09; 1MB/S&#xff08;兆字节/秒&#xff09;…

UDP大块数据传输测试

前一阵子我对UDP传输大块数据方面做了一些尝试&#xff0c;在本文中总结了一些失败的教训。 对于本文所述“大块数据”&#xff0c;我定义为大小在数MB至数GB之间的数据块。数据可以在内存里&#xff0c;也可以来自文件。 方案1&#xff1a;逐包请求 此方案采用逐包请求模式&…

什么是提示词工程师?

前言 你可能听说过人工智能模型&#xff0c;但你是否知道&#xff0c;背后的神奇之处源自于那些执着于提示设计和优化的专业人员&#xff1f;提示词工程师是引导我们与机器对话的幕后英雄&#xff0c;他们通过精心构造的提示&#xff0c;让模型理解我们的意图、解答问题&#…

如何找到jdk的安装路径

在开始那里找到jdk 然后打开文件所在位置 这是快捷方式 然后右键 打开文件所在的位置&#xff08;第三个选项&#xff09; &#xff08;这个截不了图&#xff09; 再往回退一格&#xff0c;就是jdk安装路径了。

如何查看jdk安装路径

1.开始–点击运行(或者搜索)&#xff0c;输入&#xff1a;cmd 2.然后在命令提示符中&#xff0c;输入&#xff1a;java -version查看安装的jdk版本号 假如看到有版本提示那么安装成功 3.如果忘记了java jdk的安装路径&#xff0c;可在命令提示符中输入&#xff1a;java -verb…

如何查找jdk安装目录

如何查找jdk安装目录 1.右击鼠标–>属性–>控制面板主页&#xff08;打开控制面板&#xff09; 2.程序–>右击java–>打开–>查看&#xff08;可看到jdk安装路径&#xff09;