码迷,mamicode.com
首页 > 编程语言 > 详细

c++中深拷贝和浅拷贝问题

时间:2016-03-18 18:12:46      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:private   include   public   程序   用户   

在C++中深拷贝和浅拷贝问题还是比较重要的,简单介绍一下深拷贝和浅拷贝的意思,在C++中类默认有六个函数,拷贝构造函数就包括在其中,对于在程序运行的过程中,如果程序中没有自定义拷贝构造函数,那么程序将会使用自己的默认构造函数,在这个过程中,称为浅拷贝,用户自定义的拷贝构造函数称为深拷贝。

以下面的实际例子来加以说明深拷贝和浅拷贝之间的主要区别:

#include <iostream>

#include<string>

using namespace std;

class A

{

private:

char* _a;

public:

A( char* a=/*""*/NULL)

{

_a = new char[strlen(a) + 1];

cout << "A()" << endl;

}

~A()

{

if (_a != NULL)

delete _a;

_a = NULL;

cout << "~A()" << endl;

}

void show()

{

cout << _a << endl;

}

};

int main()

{

A a("123");

A aa(a);

getchar();

return 0;

}

这个时候对象a里面的_a与对象aa中的_a共用一块空间,这个时候程序调用析构函数的时候,这个共用空间就会被释放两次,程序将会出现问题.

深拷贝的时候,用户自己自定义一个拷贝构造函数,程序如下所示

#include <iostream>

#include<string>

using namespace std;

class A

{

private:

char* _a;

public:

A( char* a=/*""*/NULL)

{

_a = new char[strlen(a) + 1];

cout << "A()" << endl;

}

~A()

{

if (_a != NULL)

delete _a;

_a = NULL;

cout << "~A()" << endl;

}

A(const A &a)

{

_a = new char[strlen(a._a) + 1];

strcpy(_a, a._a);

}

void show()

{

cout << _a << endl;

}

};

int main()

{

A a("123");

A aa(a);

cout << &a << endl;

cout << &aa << endl;

getchar();

return 0;

}


本文出自 “局部和static变量” 博客,转载请与作者联系!

c++中深拷贝和浅拷贝问题

标签:private   include   public   程序   用户   

原文地址:http://10810512.blog.51cto.com/10800512/1752508

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!