首页 > 编程语言 >C++深拷贝和浅拷贝的区别

C++深拷贝和浅拷贝的区别

时间:2024-08-01 19:50:58浏览次数:10  
标签:name 区别 age C++ char student 拷贝 构造函数

C++深拷贝和浅拷贝的区别

#include <iostream>
#include<cstring>

using namespace std;

class student {
public:
    student(const char* name, int age);//声明构造函数
    ~student();//析构函数

    //如果没有定义拷贝构造函数,编译器就自动生成默认拷贝构造函数:浅拷贝
   /* student(student& a)
    {
        this->name = a.name;
        this->age = age;
    }*/

    //自定义的拷贝构造函数:深拷贝
    student(student& a) {
        cout << __FUNCTION__ << endl;
        this->name = new char[256];

        this->age = a.age;
    }

private:
    char* name;
    int age;
};


student::student(const char* name, int age = 0)
{
    //定义构造函数
    cout << "//定义构造函数" << endl;
}

student::~student()
{
    //定义析构函数
    cout << "//定义析构函数" << endl;
    delete[]name;
}

int main()
{
    student myname("zhang",13);


 }



控制台结果:
image

什么时候需要自己定义拷贝构造函数?

当类数据成员中有指针成员的时候,需要申请内存空间。

深拷贝和浅拷贝的区别?

浅拷贝:只拷贝对象本身空间的内容,公用一个空间内存,

深拷贝:拷贝对象本身空间的内容,同时还分配指向的堆空间。

标签:name,区别,age,C++,char,student,拷贝,构造函数
From: https://www.cnblogs.com/zcx0326/p/18337355

相关文章

  • 行李托运问题(c++实际问题专题1)
    大家好,小编今天给大家带来一个问题,这个问题出题方法也比较实用。先看一下题干: 这道题目其实分一下货物的类型就行了,<=10的算一类,>10的算一类,这样在分别算出就行,先算<=10的:if(n<=10)cout<<fixed<<setprecision(2)<<2.5;//注意,这里需要用fixed-setpresicion函数......
  • Visual Studio 中.net8.0(以前叫NET Core)框架和.net framewok 框架有什么区别
    更新vs到2022版本后,新建项目时就多出不少选项,这里来给大家分享下.net8.0(以前叫NETCore)框架和.netframewok的区别如下图,不带后缀的就是使用.net8.0。.netframewok框架选项:正文开始:###支持的C#语言版本-**.NETCore(及其后续版本,如.NET5,.NET6,.NET7)**:这......
  • C++ STL adjacent_difference 用法
    一:功能    计算相邻两个元素的差(默认),也可以使用其他自定义运算函数,比如计算相邻两个元素的和。二:用法#include<iostream>#include<vector>#include<numeric>intmain(){std::vector<int>data{2,3,5,7,11,13};//前两个参数指定输入的范围,第......
  • C++-入门(下)
    一、前言:目标:1.C++关键字2.命名空间3.C++输入&输出4.缺省参数5.函数重载6.引用7.内联函数8.auto关键字(C++11)9.基于范围的for循环(C++11)10.指针空值---nullptr(C++11)二、目标的实现:6.引用:6.1引用概念:        引用不是新定义一......
  • C++ - 左值和右值的区别
    示例:来看一行简单的代码1inta=10;这行代码,"="左边就是左值,"="右边的则为右值,那他们到底有什么不同呢?如果是Java、PHP等后端同学,会称以左边的"a"为变量,右边的"10"为字面量,而到了C++这里,我们就需要对他理解更多一点。这行代码运行起来,是在系统内存中申......
  • 【C++】多态
    什么是多态?就是不同对象在完成某个行为时,会产生不同的形态多态分为静态多态和动态多态静态多态在编译期间就确定执行哪个函数,主要包含:函数重载和运算符重载静态多态函数的地址早绑定-在编译阶段确定函数的地址动态多态派生类和虚函数实现的运行阶段的多态动态多态函数......
  • 【C++】1.C++入门(1)
    文章目录1.C++关键字2.命名空间2.1命名空间定义2.2命名空间使用3.C++输入&输出4.缺省参数4.1缺省参数概念4.2缺省参数分类5.函数重载5.1函数重载概念5.2C++支持函数重载的原理--名字修饰(nameMangling)1.C++关键字C++总计63个关键字,C语言32个关键字2.......
  • 深入探讨C++编译期多态:提高效率与安全性
    目录一、引言二、编译期多态技术详解函数重载(FunctionOverloading)运算符重载(OperatorOverloading)模板元编程(TemplateMetaprogramming)使用std::enable_if实现条件模板特化使用ifconstexpr实现编译期条件分支SFINAE(SubstitutionFailureIsNotAnError)CRTP(Curious......
  • contiguous、continuous、continual、serial、adjacent、consecutive和successive的区
    contiguous:表示连续、完整、不间断。比如一张纸,它是contiguous的,撕开再拼上,他就只能是consecutive的continuous:表示某事一直持续,没有停顿serial:系列。表示一连串相同的或者类似的或者有共同特征的东西。强调共同特征。adjacent:相邻。与consecutive的区别是,consecutive强调没有......
  • 基于Django的超市小程序+47822(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫、APP、小
    基于django超市小程序摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,超市小程序被用户普遍使用,为方便用户能够可以随时进行超市小程序的数据信息管理,特开发了基于djan......