You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改基类且不逐个复制的前提下复制基类对象值到派生类?

安全复制CClient对象到CClientHook的方法

方法1:利用public继承的基类赋值

因为CClientHook是CClient的public派生类,我们可以直接对g_ClientHook的基类子对象进行赋值,编译器会自动调用CClient的默认赋值运算符完成所有成员的复制:

static_cast<CClient&>(g_ClientHook) = g_Client;

安全性说明

  • CClient的默认赋值运算符会自动复制所有非静态成员(包括Connect、Disconnect函数指针和m_bIsConnected布尔值),无需手动逐个指定成员。
  • 函数指针的复制是浅拷贝,这里不存在资源管理问题,完全安全;布尔值的复制也没有风险。
  • 该操作仅修改g_ClientHook的基类部分,不会影响派生类独有的m_bIsHooked成员。

方法2:使用memcpy内存拷贝

由于CClient是POD类型(所有成员均为POD,无用户定义的构造/析构/赋值运算符,无虚函数),可以直接通过memcpy复制其内存内容到g_ClientHook的基类区域:

#include <cstring> // 需要包含头文件

memcpy(&g_ClientHook, &g_Client, sizeof(CClient));

安全性说明

  • sizeof(CClient)确保仅复制基类部分的内存,不会覆盖g_ClientHook中派生类独有的m_bIsHooked成员。
  • POD类型的内存布局是标准且可预测的,memcpy操作不会导致内存错误或未定义行为。
  • 同样无需手动逐个复制成员,也不需要修改CClient基类。

内容的提问来源于stack exchange,提问作者fajront

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:25:25