<分区>
在 C++ 中,如果未定义复制构造函数,编译器将为您完成。如果定义了一个,编译器就不会。编译器生成的复制构造函数可以是平凡的或非平凡的。在普通的复制构造函数中,它执行成员复制。就是这样。
但是,如果存在虚函数,则复制构造函数是非平凡的。它不能只是按位复制。
这是我的程序。没有什么特别的。只是为了说明我的观点..
#include<iostream>
using namespace std;
class baseClass
{
public:
int var;
int* varPtr;
const float floatVar;
int &intRefVar;
baseClass(int value) : var(value), varPtr(&var), floatVar(value), intRefVar(var)
{
cout << "baseClass constructor" << endl;
}
baseClass(const baseClass& objToCopy) : var(objToCopy.var), varPtr(&var), floatVar(objToCopy.floatVar), intRefVar(var)
{
cout << "baseClass copy constructor" << endl;
}
virtual void func()
{
cout << "Just a virtual func." << endl;
}
};
class derivedClass : public baseClass
{
public:
derivedClass(int value) : baseClass(value)
{
cout << "derivedClass constructor" << endl;
}
derivedClass(const derivedClass& objToCopy) : baseClass(objToCopy)
{
cout << "derivedClass copy constructor" << endl;
}
virtual void func()
{
cout << "Just another virtual func." << endl;
}
};
int main(int argc, char** argv)
{
derivedClass derClassObj1(10);
derivedClass derClassObj2(derClassObj1);
return 0;
}
在这个程序中,
- 我已经定义了一个拷贝构造函数
- 我有一个虚函数,所以复制构造函数很重要
这是我的问题:
- 由于 vptr 的存在,非平凡的复制构造函数与平凡的复制构造函数有何不同?
- 为什么不能复制vptr?如果两个对象的类型相同(继承级别相同),它们都可以指向同一个虚表,不是吗?
- 既然我已经定义了自己的复制构造函数,编译器是否会向我的复制构造函数“添加”特殊指令来处理虚拟性?
干杯。