构造函数中调用虚函数
时间: 2023-09-26 09:07:45 浏览: 63
在C++中,构造函数中调用虚函数是一个有趣的问题。根据引用\[1\]中的解释,当调用构造函数时,对象的虚表指针已经被设定好,因此调用虚函数不会有任何问题。在引用\[2\]的示例代码中,当创建一个B对象时,B的构造函数会先调用A的构造函数,然后调用B的构造函数。在A的构造函数中调用了虚函数fun(),此时对象的虚表指针已经指向B的虚表,因此调用的是B的fun()函数。同样,在B的构造函数中调用虚函数fun()时,也会调用B的fun()函数。
然而,需要注意的是,在构造函数中调用虚函数时,可能会导致意外的行为。因为在派生类的构造函数中,基类的成员变量还没有被初始化,因此在调用虚函数时,可能会访问到未定义的成员变量。这在引用\[3\]的示例代码中可以看到。在这个例子中,当创建一个Car对象时,Car的构造函数会先调用Base的构造函数,然后初始化自己的成员变量。在Base的构造函数中调用了虚函数Test(),此时Car对象的成员变量m_nValue还没有被初始化,因此在调用Test()时会导致未定义的行为。
因此,尽量避免在构造函数中调用虚函数,以免引起意外的行为。如果需要在构造函数中执行某些操作,可以考虑使用非虚函数或将虚函数延迟到对象完全构造完成后再调用。
#### 引用[.reference_title]
- *1* *2* [在构造函数中调用虚函数](https://blog.csdn.net/songchuwang1868/article/details/96481853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [构造函数中调用虚函数](https://blog.csdn.net/Think88666/article/details/104512651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]