UnrealEngine C++ 与标准 C++ 的区别
1. 类声明与反射系统
1.1 类定义语法
Unreal C++
1 | // 必须继承UObject且使用反射宏 |
标准 C++
1 | class MyObject { |
1.2 反射机制对比
特性 | Unreal C++ | 标准 C++ |
---|---|---|
运行时类型信息 | 通过UCLASS宏自动生成 | 仅支持有限RTTI |
动态属性访问 | UPROPERTY字段可通过名字字符串访问 | 需要手动实现反射系统 |
方法调用 | UFUNCTION支持蓝图调用和RPC | 只能静态调用 |
2. 内存管理模型
2.1 对象生命周期
Unreal C++
1 | // 自动垃圾回收 |
标准 C++
1 | // 手动管理 |
2.2 内存分配器对比
1 | // Unreal自定义分配器 |
3. 核心数据类型差异
3.1 字符串处理
Unreal C++
1 | FString Str = TEXT("Hello"); // UTF-16 |
标准 C++
1 | std::string str = "Hello"; // 依赖编码 |
3.2 容器类对比
数组操作
1 | // Unreal |
字典操作
1 | // Unreal |
4. 多线程编程
4.1 任务系统
Unreal C++
1 | // GameThread执行 |
标准 C++
1 | std::thread t([](){ |
5. 编译系统差异
5.1 模块定义
Unreal模块
1 | // MyModule.Build.cs |
CMake示例
1 | add_library(MyModule STATIC src.cpp) |
6. 常用宏对比
6.1 常用Unreal宏
1 | UE_LOG(LogTemp, Warning, TEXT("Message")); // 日志 |
6.2 标准C++等效
1 | std::cout << "Message" << std::endl; // 日志 |
7. 最佳实践建议
- 在Unreal项目中:
- 始终使用
UCLASS()
/UFUNCTION()
暴露需要反射的类 - 对
UObject
派生类不要使用智能指针 - 使用
TArray
代替std::vector
以获得更好性能
- 始终使用
- 在独立模块中:
- 可使用标准库容器和智能指针
- 通过纯接口类与Unreal代码交互
- 将标准C++代码封装在
Private
目录
- 通用规则:
- 避免在头文件中混合两种风格的代码
- 对性能关键路径使用Unreal优化容器
- 跨平台代码优先使用Unreal封装
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 古月月仔的博客!
评论