zoukankan      html  css  js  c++  java
  • 构造、拷贝构造、赋值、析构

    需要注意的问题(当数据成员函数指针型变量,需要申请空间赋值时)
    1.构造函数
    ①需要给空指针申请一个‘’的空间
    2.拷贝构造函数
    ①传入的参数,必须引用传递否则会出现无休止的拷贝构造
    ②对其参数值不做修改,传入的参数需要加const
    ③避免浅拷贝的产生,每次拷贝构造,都重新申请空间赋值。
    3.赋值=
    ①需要返回引用型变量,否则会再返回值时,创建临时对象,又会无休止的拷贝构造
    ②对其参数值不做修改,传入的参数需要加const
    最重要先判断是否是给自己赋值,如果是,直接返回
    ④为考虑到异常安全,此时采用拷贝构造一个 参数(n) 的 临时对象(temp) ,来交换他们指针所指向的空间,在出此作用域后,临时对象就会释放。
    4.析构
    ①如果有派生类,需要将析构函数声明为虚函数,来避免内存泄漏。
    #include <iostream>
    using namespace std;
    
    class Node
    {
    public:
        Node(const char*str="",int a = 0):m_a(a)
        {
            if (str == NULL)
            {
                m_p = new char[1];
                m_p[0] = '';
            }
            else
            {
                m_p = new char[strlen(str)+1];
                strcpy(m_p, str);
                m_p[strlen(str)] = '';
            }
        }
        Node(const Node& n)
        {
            int len = strlen(n.m_p);
            m_p = new char[len + 1];
            strcpy(m_p,n.m_p);
            m_a = n.m_a;
        }
        Node& operator=(const Node& n)
        {
            if (this != &n)
            {
                Node temp(n);
                char* temp_str = temp.m_p;
                temp.m_p = m_p;
                m_p = temp_str;
                m_a = n.m_a;
            }
            return *this;
        }
        virtual ~Node()
        {
            delete m_p;
        }
    private:
        char* m_p;
        int m_a;
    };
    
    int main()
    {
        Node a("abcd",10);
        
        Node b(a);
        Node c;
        c = a;
    }
  • 相关阅读:
    AJAX
    JQUERY基础
    PHP 数据库抽象层pdo
    会话控制:session与cookie
    php 如何造一个简短原始的数据库类用来增加工作效率
    php 数据访问(以mysql数据库为例)
    面向对象设计原则
    php 设计模式 例子
    PHP中静态与抽象的概念
    键盘的按钮键名
  • 原文地址:https://www.cnblogs.com/single-dont/p/11379488.html
Copyright © 2011-2022 走看看