第二章:基础知识 面试题1

C++ 程序员的基础知识:

关于sizeof 空类型:

extend :

构造函数的作用:用于新建对象的初始化工作。
析构函数的作用:用于在撤销对象前,完成一些清理工作,比如:释放内存等。
每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。

关于c++中不允许复制构造函数传值参数的理解

https://blog.csdn.net/xiaoquantouer/article/details/70145348

面试题 一 

如下为类型CMyString的声明,请为该类型添加赋值运算符函数。

class CMyString
{
public :
    CMyString(char* pData = NULL);
    CMyString(const CMyString& str);
    ~CMyString(void);
private :
    char* m_pData;
};
//传统写法

CMyString& CMyString::operator=(const CMyString& str) { if (this != &str)//判断自赋值 { //这里选择一个临时变量来存放字符串的地址, //而不是先释放空间,然后再开辟新的空间。 //是因为考虑了异常安全性,如果先释放旧空间,再开辟新的空间, //由于用new去开辟新的空间,如果失败,那么就会抛异常出去,而你又释放了旧空间。 //想一下,这个函数是为了将s2赋值给s1,在这种情况下没有赋值成功,而且也破坏了s1,得不偿失 char* tmp = new char[strlen(str.m_pData) + 1]; strcpy(tmp, str.m_pData); delete[] m_pData; m_pData = tmp; } return *this;//为了支持类似(s1=s2=s3)这种链式赋值 }

 

 

考虑到了内存的回收。

猜你喜欢

转载自www.cnblogs.com/frank-QAQ/p/9044671.html
今日推荐