C++中注意不到的细节

Posted 心得记录

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中注意不到的细节相关的知识,希望对你有一定的参考价值。

    C++是面向对象的语言,是目前最复杂的编程语言。

    它包含了之前面向过程语言所包含的特点,也包含了面向对象编程的特点。封装,继承,多态,是面向对象编程的重要思想。今天,想来聊一聊关于编程中不经意的细节问题。

    面向对象中最重要的要属Class了,其中包含最基础的几个东西分别是:构造函数(初始化),析构函数(销毁),拷贝构造函数(复制给别的对象),移动构造函数(与深拷贝构造函数基本类似)等等。

    类和对象之间的关系,类是一个实际问题中的一个部分的抽象,而对象则是一个具体实际问题中的一部分中所存在需要处理的。以上所提到的最基础的几个成分,都是对应对象所存在的,当你在定义一个类的时候如果没有写构造函数,析构函数,拷贝构造函数时,类会自动生成几个空的构造函数。

    不知道你在编程的时候是否会存在这样的疑问。在类中定一个成员函数时,如果返回的类型是一个对象类型时。当这个类声明周期结束的时候返回的这个对像还存在吗?其实,这个问题需要进行细致的调试或者hack到汇编语言便会有结果:在你不经意return对象的时候它在内部会自动调用类拷贝构造函数。当你在本函数先new出一个对象的时候会对空间有一个开销,再将其return出去的时候又调用一个拷贝构造函数进行一次开销,如果你在return的时候进行new此对象就会节省一次拷贝构造函数的开销。它会将你new出的对象传出去。这当中还有一个不容易发觉的问题,如果你在此函数中返回对象,而这个对象对应的类却没有书写拷贝构造函数或者你书写了的功能却没有那么的完整准确。那么你return时会出现各种意想不到的问题。当你没有定义自己的拷贝构造函数时则是浅拷贝,只有你自己进行定义了才能形成深拷贝。

    一般的析构函数会定义成虚函数,在下次提到到虚表的时候再进行理解,移动构造函数是通过move进行调用的,在下次提到智能指针的时候再进行理解。

以上是关于C++中注意不到的细节的主要内容,如果未能解决你的问题,请参考以下文章

C++深拷贝和浅拷贝细节理解

vue全家桶搭建前端页面注意细节及遇到的难题

ClassLoader载入指定的类需注意六个细节或报ClassNotFundEception异常总结

string使用的小细节

C++ 容器一些细节

C++cin&cout细节