UE C++学习1,创建C++项目

1.打开虚幻引擎,选择c++的项目,点击创建

2.创建完成之后会出现以下两个界面

ctrl+shift+b编译程序

第一个需要注意的是在游戏模式那里,尽量不要选择c++的类,写一个蓝图的gamemode继承这个c++的类,这样可以比较灵活的修改gamemode里面的参数。

第二个需要注意的是尽量不要使用原始指针,具体原因如下:

在 Unreal Engine 和 C++ 编程中,尽量避免使用原始指针(raw pointer),如 USpringArmComponent* CameraBoom;,主要是出于内存管理和安全性考虑。相较于原始指针,使用类似于 TObjectPtr<USpringArmComponent> 这样的智能指针或指针包装类可以更好地管理对象的生命周期并减少潜在的错误。以下是几个原因:

1. 内存泄漏的风险

原始指针不会自动管理内存,开发者必须手动管理对象的分配和释放。如果忘记释放动态分配的对象,或者错误地释放了已经释放的内存,就会导致内存泄漏或访问无效的内存。

TObjectPtr 和其他智能指针(如 TSharedPtrTWeakPtr)帮助自动管理内存,减少了手动管理的负担,避免了内存泄漏的风险。

2. 对象生命周期管理

Unreal Engine 中的对象通常由引擎的垃圾回收机制管理,特别是继承自 UObject 的对象。原始指针无法通知垃圾回收器对象是否仍在使用,可能会导致对象被回收时仍然有原始指针指向它,从而引发悬空指针问题。

TObjectPtr 是引擎提供的安全指针类型,用于指向 UObject 类对象。它不会影响垃圾回收器的行为,但能安全地处理对象被回收的情况,防止访问无效的内存。

3. 空指针检查

原始指针在使用之前需要手动进行空指针检查,否则可能导致访问无效的内存而崩溃。而使用 TObjectPtr 这样的封装类通常会包含一些额外的安全检查,确保指针在使用时是有效的。

4. 提高代码可维护性

智能指针提供的自动内存管理和额外的安全检查可以让代码更加健壮和安全,同时减少内存管理相关的错误,这使得代码更容易维护。

5. Unreal Engine 的生态系统

Unreal Engine 推荐使用 TObjectPtrTSharedPtrTWeakPtr 等智能指针类型来处理内存管理和引用计数。使用这些类型能让代码与引擎的其他部分更好地协同工作,减少与垃圾回收和引用管理的冲突。

总结

尽量避免使用原始指针是为了更好地管理内存,避免悬空指针、内存泄漏等问题。TObjectPtr 是一种轻量级的智能指针,它可以在 Unreal Engine 的垃圾回收机制下更安全地使用对象,同时不影响性能。

猜你喜欢

转载自blog.csdn.net/m0_67843890/article/details/142535106