c++类默认拷贝构造函数---浅复制

类默认的拷贝构造函数是浅复制,比如如下程序,类中指向的地址是一样的

#include <iostream>
using namespace std;

class Test
{
public:
    int *a;
};

int main()
{
    Test *t = new Test();
    int aa = 1314520;
    t->a = &aa;

    Test *t2 = new Test(*t);

    cout<<t->a<<endl;
    cout<<t2->a<<endl;

    return 0;
}

时间: 2024-09-17 03:22:12

c++类默认拷贝构造函数---浅复制的相关文章

关于c++中默认拷贝构造函数的理解

问题描述 关于c++中默认拷贝构造函数的理解 如题,请解释一次详细的原理 假如我定义一个类的对象a,然后在没有自己编写构造函数的情况下用语句A b=a来初始化新的对象b,会发生什么,为什么? 解决方案 编译器会给你产生一个默认的拷贝构造函数,执行的是浅拷贝.所谓浅拷贝,就是直接字段的拷贝.如果对象包含一个指针,那么两个对象都指向同一个地址. 解决方案二: 如果未提供自己的拷贝构造函数,则C++提供一个默认拷贝构造函数,就像没有提供构造函数时,C++提供默认构造函数一样. C++提供的默认拷贝构造

定义类的指针变量如何重载类的拷贝构造函数和重载=号

问题描述 定义类的指针变量如何重载类的拷贝构造函数和重载=号 #ifndef LIST_OPRATOR #define LIST_OPRATOR #include using namespace std; class Complex { private: int a; char* p; public: void operator=(Complex* c2); Complex(const Complex* c2); Complex(int a,char* m); ~Complex() { cout

对象-编译器合成默认拷贝构造函数问题

问题描述 编译器合成默认拷贝构造函数问题 看<深度探索C++对象模型>遇到的问题. P49里的例子对于bitwise copy semantics展现了memberwise的拷贝,但是后面P50下面说bitwise copy semantics不需要合成拷贝构造函数. 在P52页的两个例子中,第一个说没合成,我的理解也就是没有初始化int和char*,但之后的第二个合成了拷贝构造函数,不仅初始化了string,更初始化了int. 我又用vs测试了下,发现可以运行 class B { publi

C++类对象的复制-拷贝构造函数

在学习这一章内容前我们已经学习过了类的构造函数和析构函数的相关知识,对于普通类型的对象来说,他们之间的复制是很简单的,例如: int a = 10; int b =a; 自己定义的类的对象同样是对象,谁也不能阻止我们用以下的方式进行复制,例如: #include <iostream>using namespace std;class Test{public: Test(int temp) { p1=temp; }protected: int p1;};void main(){ Test a(9

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数     类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数

C++之拷贝构造函数

一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plaincopy int a = 100;   int b = a;    而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对象拷贝的简单例子. [c-sharp] view plaincopy #include <iostream>   using namespace std;      class CExample {   privat

C++拷贝构造函数详解

转自:http://blog.csdn.net/lwbeyond/article/details/6202256 对于一个空类,编译器默认生成四个成员函数:默认构造函数.析构函数.拷贝构造函数.赋值函数: 一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. 1 #include <iostream> 2 us

C/C++ 拷贝构造函数

一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plain copy int a = 100;   int b = a;    而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对象拷贝的简单例子. [c-sharp] view plain copy #include <iostream>   using namespace std;      class CExample {   priv

C++中拷贝构造函数的总结详解_C 语言

1.什么是拷贝构造函数: 拷贝构造函数嘛,当然就是拷贝和构造了.(其实很多名字,只要静下心来想一想,就真的是顾名思义呀)拷贝又称复制,因此拷贝构造函数又称复制构造函数.百度百科上是这样说的:拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化.其唯一的参数(对象的引用)是不可变的(const类型).此函数经常用在函数调用时用户定义类型的值传递及返回. 2.拷贝构造函数的形式 复制代码 代码如下: Class X{public: X(); X(const