• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中的构造函数与析构函数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

      在C++中,当类中含有指针类型的数据时,我们往往要用到三种构造函数,即普通构造函数、拷贝构造函数、赋值构造函数,而且在析构函数中,要正确析构相应的内存。

      下面以代码为实例进行演示,同时推荐大家看看林锐博士的《高质量C++/C 编程指南》,其中对编程规范和一些常见的问题进行了深度剖析,《高质量C++/C 编程指南》电子版下载地址为http://download.csdn.net/source/3091633。

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

class B
{
public:
    char* str;

    explicit B(char *s = NULL)
    {
        cout << "调用了B普通构造函数" << endl;
        if (s != NULL) {
            str = new char[strlen(s) + 1];
            strcpy(str, s);
        } else {
            str = NULL;
        }
    }

    //拷贝构造函数
    B(const B& temp)
    {
        cout << "调用B拷贝构造函数" << endl;
        str = new char[strlen(temp.str) + 1];
        strcpy(str, temp.str);
    }
    //赋值构造函数
    B & operator = (const B& x)
    {
        cout << "调用B赋值运算符重载" << endl;
        if(this == &x)
            return *this;
        delete [] str;
        str = new char [strlen(x.str) + 1];
        strcpy(str, x.str);
        return *this;
    }
    ~B()
    {
        printf("~B\n");
        delete [] str;
        str = NULL;
    }
};

class A
{
public:
    B b;
    A(){}
    A(B bb)
    {
        cout << "A()构造函数" << endl;
        b = bb;
    }
    ~A()
    {
        printf("~A\n");
    }
};
int main()
{
    char* str = new char[5];
    for(int i = 0; i < 4; i++)
        str[i] = 'a' + i;
    str[4] = '\0';
    //这是第一个B
    B* b = new B(str);
    printf("%s\n", b->str);
    //括弧里的*objectB先调用B的拷贝构造函数
    // 然后在A内调用了B的=运算符重载。
    A* a = new A(*b);
    printf("%s\n", b->str);
    //delete A,然后A里的B也被析构了。 
    delete a;
    //delete 这是第一个B。
    delete b;

    //default constructor
    B *b2 = new B();
    delete b2;

    return 0;
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
转:C语言中 #和##的运用发布时间:2022-07-13
下一篇:
ADHelper C#域用户操作(转)发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap