需要注意的问题(当数据成员函数指针型变量,需要申请空间赋值时)
1.构造函数
①需要给空指针申请一个‘\0’的空间
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] = ‘\0‘; } else { m_p = new char[strlen(str)+1]; strcpy(m_p, str); m_p[strlen(str)] = ‘\0‘; } } 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; }
原文地址:https://www.cnblogs.com/single-dont/p/11379488.html
时间: 2024-11-14 11:58:17