今天才知道,原来copy constructor 的实现竟然可以使用memcpy()或者memset()来实现,类似于memcpy(this,&rhs,sizeof(the_other_object_of_the_same_class))其实从理论上来说,也解释得通。毕竟copy constructor的作用就是把内存的某一块的内容拷贝到另一块。
虽然这个拷贝的效率很高,因为直观上很接近机器的实现风格,然而这个方法在有virtual function或者virtual base class时就会失效,因为涉及到virtual的时候,会有一个virtual table,以及virtual pointer,而virtual pointer的值会在memcpy()或者memset()之前被设定,如果再调用memcpy()或者memset(),那么virtual pointer就会被清0,也就是说virtual就无法正常实现了。
c++绝对是一门博大精深的语言,连个copy constructor都可以这么有讲究。