2 weixin 34703558 weixin_34703558 于 2016.04.19 22:49 提问

关于复制构造函数跟赋值运算符重载

新手求指导 关于两个函数不太理解 复制构造的是同一个内存地址吗 为什么要重载赋值运算符

3个回答

NK_test
NK_test   Rxr 2016.04.19 23:42
已采纳

赋值运算符和复制构造函数都是用已存在的B对象来创建另一个对象A。不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的;复制构造函数是生成一个全新的对象,即调用复制构造函数之前A不存在。
CTemp a(b); //复制构造函数,C++风格的初始化
CTemp a=b; //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样
在这之前a不存在,或者说还未构造好。
CTemp a;
a=b; //赋值运算符
在这之前a已经通过默认构造函数构造完成。

而之所以要自定义这些,是因为防止有指针时浅拷贝造成错误。具体可百度 rule of three原则

caozhy
caozhy   Ds   Rxr 2016.04.19 23:43

因为默认的复制构造函数是浅拷贝。比如说如下类
class Person
{
public:
char * Name;
int Age;
};
默认的构造函数在拷贝的时候,会创建一个新的对象,并且拷贝Name和Age的值,两个对象各自有一个Age,但是两个对象各自只有一个Name的指针,指向了同一个字符串对象。所以你需要自己实现拷贝构造函数,用malloc为第二个对象分配新的空间,用strcpy真正拷贝出一个新的Name来。

CSDNXIAOC
CSDNXIAOC   2016.04.19 22:52

#include
#include
#include
#include
using namespace std;
class My
{
public:
My()
{
n = 0;
arr = NULL;
cout......
答案就在这里:复制构造函数和重载赋值运算符
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于拷贝构造函数和赋值运算符重载的看法
赋值运算符 拷贝构造函数
拷贝构造函数与赋值运算符重载的区别
拷贝构造函数应用的场合由以下几个方面:   1 函数的参数是一个对象,并且是值传递方式   2 函数的返回值是一个对象,并且是值传递方式   3 用一个对象初始化另外一个对象
C++ 复制构造函数和赋值运算符重载函数
声明一个空的类testsize,sizeof(testsize)为1,为其声明构造函数和析构函数,依旧为1 构造函数不能使用关键字virtual,析构函数可以 一旦类中存在虚函数,就会为该类生成虚函数表,并在每一个实例中添加一个指向虚函数表的指针,从而大小为一个指针大小,32位机器上为4,64位机器上为8 复制构造函数     1. 调用时机:在三种情况下会调用复制构造函数  
C++复制构造函数与重载赋值操作符
http://www.cnblogs.com/BlueTzar/articles/1223313.html 复制构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一个引用变量,该参数是const类型,不可变的。例如:类X的拷贝构造函数的形式为X(X& x)。 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。
C++赋值运算符重载函数和拷贝构造函数
一、提供默认赋值运算符重载函数的时机 当程序没有显示地提供一个以本类或者本类的引用为参数的赋值运算符重载函数时,编译器会自动生成这样一个赋值运算符重载函数。#include <iostream> using namespace std;class Data { public: Data() {} Data(int _data) :data(_data) {
C++语法,复制构造函数与=运算符重载
C++:复制构造函数在什么时候被调用?它和operator = 区分 1、对象在创建时使用其他的对象初始化 Person p(q); //此时复制构造函数被用来创建实例p Person p = q; //此时复制构造函数被用来在定义实例p时初始化p 2、对象作为函数的参数进行值传递时 f(p); //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建一个局部对象,
C++ 拷贝构造函数和重载赋值操作符不能相互调用
拷贝构造函数调用重载赋值操作符,重载赋值操作符调用拷贝构造函数的写法都是没有意义的。 首先: 拷贝构造函数的存在意义--------是通过已有的对象构造新的对象,构造完毕后才有两个对象; 重载赋值操作符的意义-----------将一个对象的值赋给另一个对象,两个对象都已经构造完毕了。 拷贝构造函数----调用-----重载赋值操作符:把已有对象的值赋给一个构造中的对象
带复制构造函数、赋值运算符的模板队列
#ifndef QUEUE_HPP #define QUEUE_HPP #include #include template class Queue; template class Node{ friend class Queue; public: Node(T data = 0, Node *next = NULL) :data
C++的拷贝构造函数、operator=运算符重载,深拷贝和浅拷贝、explicit关键字
1、在C++编码过程中,类的创建十分频繁。 简单的功能,当然不用考虑太多,但是从进一步深刻理解C++的内涵,类的结构和用法,编写更好的代码的角度去考虑,我们就需要用到标题所提到的这些内容。 最近,在看单例模式,觉得十分有趣,然而如果想要掌握单例模式,就必须掌握这些内容。下面是我的一些学习总结,参考了很多博客内容。文末将注明出处。 2、先上代码 // testSingleMode.cpp :
c++双链表【构造函数、运算符重载、析构函数、增删查改及逆置等】
c++中的双向链表写法,主要实现(增删查改,链表逆置,构造函数,运算符重载,等)建立头文件SList.h#pragma once typedef int DataType; class ListNode { friend class List;//友元函数 public: ListNode(const DataType x) :_data(x) , _prev(NULL) , _