从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类与空数组

本文详细介绍了C++中的深拷贝与浅拷贝概念,强调了深拷贝在处理包含指针成员的对象时的重要性,以及如何避免浅拷贝可能导致的问题。同时,探讨了空类的默认成员,包括构造函数、拷贝构造函数、析构函数及赋值运算符,并提醒程序员避免将string作为结构体成员以防止潜在的内存问题。
摘要由CSDN通过智能技术生成

一、深拷贝与浅拷贝

说得简单点,假设一个类有指针成员,如果在拷贝的时候顺带连指针指向的内存也分配了,就称为深拷贝,如下图(v2 从 v 拷贝而来):


如果只是分配指针本身的内存,那就是浅拷贝,如下图:


浅拷贝造成的问题是有两个指针指向同块内存,delete 其中一个指针,那么剩下的指针将成为野指针。编译器合成的默认拷贝构造函数和赋值运算符是浅拷贝的,如果只是普通成员的赋值,浅拷贝也是可以的。


 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef _STRING_H_
#define _STRING_H_

class String
{
public:
    String( char *str =  "");
    ~String();
    String( const String &other);
    String & operator=( const String &other);



     void Display();

private:
     char *AllocAndCpy( char *str);

     char *str_;
};

#endif  // _STRING_H_

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值