动态转换指针的 C++ 内存清理
C++ Memory Cleanup of Dynamic Cast Pointers
我试过谷歌搜索,但未能找到一个简单问题的直接答案,该问题涉及为动态转换指针清理内存。
您是否必须 deallocate/cleanup 一个在 C++ 中动态转换的指针,或者它是否被编译器等自动清除?
例如
BaseType* obj;
DerivedType* mrPointer = dynamic_cast<DerivedType*>(obj);
//Code happens here
//At the end up the use of mrPointer
mrPointer = nullptr; //Is this necessary/Is there a more proper way to cleanup?
提前致谢
不确定您的顾虑,
但在您的示例行中:
mrPointer = nullptr;
除了将 nullptr
分配给 mrPointer
之外什么都不做,这里不需要。
请更好地使用 std::shared_ptr
- 它会帮助您管理内存。
要投射 shared_ptr
使用 std::static_pointer_cast
、std::dynamic_pointer_cast
和 std::const_pointer_cast
.
如果你想释放不再使用的资源,例如指针指向的对象指针,在你的情况下动态转换,你要么使用delete
运算符并将不再使用的指针放在它后面,即:
delete mrPointer;
或你可以使用像shared_ptr
这样的智能指针,它的对象在特定情况下会被销毁并自动释放内存。
如果您的指针在其整个生命周期中只拥有一个对象,您可以使用 unique_ptr
,这将再次为您管理资源。
注:
动态转换用于将原始内存地址解释为特定类型,不应影响您对内存资源管理的看法,即指针指向的内存在不再需要时应该是空闲的,无论指针是否指向使用 explicit type conversion.
到已知的内存类型或您让它解释的类型
我试过谷歌搜索,但未能找到一个简单问题的直接答案,该问题涉及为动态转换指针清理内存。
您是否必须 deallocate/cleanup 一个在 C++ 中动态转换的指针,或者它是否被编译器等自动清除?
例如
BaseType* obj;
DerivedType* mrPointer = dynamic_cast<DerivedType*>(obj);
//Code happens here
//At the end up the use of mrPointer
mrPointer = nullptr; //Is this necessary/Is there a more proper way to cleanup?
提前致谢
不确定您的顾虑,
但在您的示例行中:
mrPointer = nullptr;
除了将 nullptr
分配给 mrPointer
之外什么都不做,这里不需要。
请更好地使用 std::shared_ptr
- 它会帮助您管理内存。
要投射 shared_ptr
使用 std::static_pointer_cast
、std::dynamic_pointer_cast
和 std::const_pointer_cast
.
如果你想释放不再使用的资源,例如指针指向的对象指针,在你的情况下动态转换,你要么使用delete
运算符并将不再使用的指针放在它后面,即:
delete mrPointer;
或你可以使用像shared_ptr
这样的智能指针,它的对象在特定情况下会被销毁并自动释放内存。
如果您的指针在其整个生命周期中只拥有一个对象,您可以使用 unique_ptr
,这将再次为您管理资源。
注:
动态转换用于将原始内存地址解释为特定类型,不应影响您对内存资源管理的看法,即指针指向的内存在不再需要时应该是空闲的,无论指针是否指向使用 explicit type conversion.
到已知的内存类型或您让它解释的类型