iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中怎么实现对象的拷贝与赋值操作
  • 901
分享到

C++中怎么实现对象的拷贝与赋值操作

2023-06-17 12:06:29 901人浏览 独家记忆
摘要

今天就跟大家聊聊有关c++中怎么实现对象的拷贝与赋值操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。拷贝构造函数,顾名思义,等于拷贝 + 构造。它肩负着创建新对象的任务,同时还要负

今天就跟大家聊聊有关c++中怎么实现对象的拷贝与赋值操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

拷贝构造函数,顾名思义,等于拷贝 + 构造。它肩负着创建新对象的任务,同时还要负责把另外一个对象拷贝过来。比如下面的情况就调用拷贝构造函数:

cstring str = strother;

赋值操作则只含有拷贝的意思,也就是说对象必须已经存在。比如下面的情况会调用赋值操作。

str = strother;

不过有的对象是隐式的,由编译器产生的代码创建,比如函数以传值的方式传递一个对象时。由于看不见相关代码,所以不太容易明白。不过我们稍微思考一下,就会想到,既然是根据一个存在的对象拷贝生成新的对象,自然是调用拷贝构造函数了。

两者实现时有什么差别呢?我想有人会说,没有差别。呵,如果没有差别,那么只要实现其中一个就行了,何必要两者都实现呢?不绕圈子了,它们的差别是:

拷贝构造函数对同一个对象来说只会调用一次,而且是在对象构造时调用。此时对象本身还没有构造,无需要去释放自己的一些资源。而赋值操作可能会调用多次,你在拷贝之前要释放自己的一些资源,否则会造成资源泄露。

明白了这些道理之后,我们不防写个测试程序来验证一下我们的想法:

#include <stdio.h>  #include <stdlib.h>  #include <string.h>  class cstring  {   public:  cstring();  cstring(const char* pszbuffer);  ~cstring();  cstring(const cstring& other);  const cstring& operator=(const cstring& other);  private:  char* m_pszbuffer;;  };   cstring::cstring()  {  printf("cstring::cstring\n");  m_pszbuffer = null;  return;   }   cstring::cstring(const char* pszbuffer)  {  printf("cstring::cstring(const char* pszbuffer)\n");  m_pszbuffer = pszbuffer != null ? strdup(pszbuffer) : null;  return;  }  cstring::~cstring()  {  printf("%s\n", __func__);  if(m_pszbuffer != null)  {  free(m_pszbuffer);  m_pszbuffer = null;  }  return;  }  cstring::cstring(const cstring& other)  {  if(this == &other)  {  return;  }  printf("cstring::cstring(const cstring& other)\n");  m_pszbuffer = other.m_pszbuffer != null ? strdup(other.m_pszbuffer) : null;  }  const cstring& cstring::operator=(const cstring& other)  {  printf("const cstring& cstring::operator=(const cstring& other)\n");  if(this == &other)  {  return *this;  }   if(m_pszbuffer != null)  {  free(m_pszbuffer);  m_pszbuffer = null;  }  m_pszbuffer = other.m_pszbuffer != null ? strdup(other.m_pszbuffer) : null;  return *this;  }   void test(cstring str)  {  cstring str1 = str;  return;  }   int main(int arGC, char* argv[])  {  cstring str;  cstring str1 = "test";  cstring str2 = str1;  str1 = str;  cstring str3 = str3;  test(str);  return 0;  }

看完上述内容,你们对C++中怎么实现对象的拷贝与赋值操作有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网其他教程频道,感谢大家的支持。

--结束END--

本文标题: C++中怎么实现对象的拷贝与赋值操作

本文链接: https://www.lsjlt.com/news/289121.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中怎么实现对象的拷贝与赋值操作
    今天就跟大家聊聊有关C++中怎么实现对象的拷贝与赋值操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。拷贝构造函数,顾名思义,等于拷贝 + 构造。它肩负着创建新对象的任务,同时还要负...
    99+
    2023-06-17
  • es6怎么实现对象拷贝
    本教程操作环境:windows7系统、ECMAScript 6版、Dell G3电脑。在理解对象的深拷贝和浅拷贝之前我们首先要知道JavaScript的数据类型,JavaScript包含两大数据类型,基本数据类型和引用数据类型。基本数据类型...
    99+
    2022-11-22
    javascript ES6
  • 怎么在JavaScript中实现对象深拷贝
    这篇文章给大家介绍怎么在JavaScript中实现对象深拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaSc...
    99+
    2023-06-14
  • javascript中怎么深拷贝与浅拷贝二维数组和对象
    javascript中怎么深拷贝与浅拷贝二维数组和对象,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.浅拷贝: 将原对象或原...
    99+
    2024-04-02
  • C++中怎么实现浅拷贝
    这篇文章给大家介绍C++中怎么实现浅拷贝,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以值堆资源,...
    99+
    2023-06-17
  • C++中怎么使用=delete阻止拷贝类对象
    这篇文章将为大家详细讲解有关C++中怎么使用=delete阻止拷贝类对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。单例模式的例子例如在Singleton设计模式中就希望类的对象只能通过g...
    99+
    2023-06-19
  • C++中怎么实现文件拷贝
    C++中怎么实现文件拷贝,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C++文件拷贝代码示例:#include< iostream.h> &nb...
    99+
    2023-06-17
  • Python的对象拷贝和内存布局怎么实现
    前言你知道下面一些程序片段的输出结果吗?a = [1, 2, 3, 4] b = a print(f"{a = } \t|\t {b = }") a[0] = 100 print(f"{a = } \t|\t ...
    99+
    2023-05-15
    Python
  • C++11中怎么利用移动类对象代替拷贝类对象
    今天就跟大家聊聊有关C++11中怎么利用移动类对象代替拷贝类对象,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。string类是C++标准库中一个很重要的类,使用非常方便。但是它存在一...
    99+
    2023-06-19
  • JavaScript中怎么使用JSON.parse()和JSON.stringify()实现对象的深拷贝功能
    今天就跟大家聊聊有关JavaScript中怎么使用JSON.parse()和JSON.stringify()实现对象的深拷贝功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家...
    99+
    2024-04-02
  • Python中算术赋值-=操作是怎么实现的
    这篇文章主要讲解了“Python中算术赋值-=操作是怎么实现的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中算术赋值-=操作是怎么实现的”吧!介绍Python 有一种叫做增强算...
    99+
    2023-06-16
  • java反射给对象属性赋值怎么实现
    Java反射可以通过`java.lang.reflect.Field`类来给对象的属性赋值。以下是一个示例代码: import ja...
    99+
    2023-10-27
    java
  • Jpa怎么使用@EntityListeners实现实体对象的自动赋值
    这篇文章主要介绍“Jpa怎么使用@EntityListeners实现实体对象的自动赋值”,在日常操作中,相信很多人在Jpa怎么使用@EntityListeners实现实体对象的自动赋值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作...
    99+
    2023-06-20
  • C++继承中的对象构造与析构和赋值重载实例分析
    本文小编为大家详细介绍“C++继承中的对象构造与析构和赋值重载实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++继承中的对象构造与析构和赋值重载实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-06-29
  • 怎么用vue的$set实现给数组集合对象赋值
    这篇“怎么用vue的$set实现给数组集合对象赋值”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2024-04-02
  • C++继承中的对象构造与析构和赋值重载详解
    目录一、构造/析构顺序及继承性二、拷贝构造的继承性三、赋值重载不具有继承性总结一、构造/析构顺序及继承性 class A { private: int _a; public: A...
    99+
    2024-04-02
  • C++中如何实现对象初始化操作代码
    这篇文章给大家分享的是有关C++中如何实现对象初始化操作代码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当对象在创建时获得了一个特定的值,我们说这个对象被初始化。初始化不是赋值,初始化的含义是创建变量赋予其一个...
    99+
    2023-06-22
  • vue怎么将对象中所有的key赋为空值
    这篇文章主要介绍“vue怎么将对象中所有的key赋为空值”,在日常操作中,相信很多人在vue怎么将对象中所有的key赋为空值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么将对象中所有的key赋为空值...
    99+
    2023-06-29
  • C++中怎么实现对象复制
    今天就跟大家聊聊有关C++中怎么实现对象复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C++对象复制代码示例:class Table{  Name&...
    99+
    2023-06-17
  • PHP中如何实现对象的并发操作?
    在PHP中,对象的并发操作是一个非常重要的主题,因为它可以提高应用程序的性能和响应速度。在本文中,我们将讨论如何在PHP中实现对象的并发操作。 首先,让我们先了解一下PHP中的并发操作是什么意思。简单来说,并发操作是指多个线程或进程同时执行...
    99+
    2023-10-22
    对象 并发 shell
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作