[英]Safer delete pointer in C++ with inline function
從這個問題 ,我這樣實現
Utils.h
:
template<class T>
void SafeDeleteWithoutClass(T* &pVal) {
std::cout << __FUNCTION__ << std::endl;
delete pVal;
pVal = nullptr;
}
template<class T>
void SafeDeleteArrayWithoutClass(T* &pVal) {
std::cout << __FUNCTION__ << std::endl;
delete[] pVal;
pVal = nullptr;
}
main.cpp
#include "Utils.h"
struct Foo {
Foo() {std::cout << __FUNCTION__ << std::endl;}
~Foo() {std::cout << __FUNCTION__ << std::endl;}
}
int main()
{
Foo *pObj = new Foo();
SafeDeleteWithoutClass<Foo>(pObj2);
return 0;
}
它運作良好。 但我團隊中的一些人說它並不比宏觀好。 我不知道是否有任何證明這種方式的例子比宏更好。 你能給我一個暗示嗎?
它並不比宏更好,因為你不能保證在刪除和刪除所有內容后它會使你不再使用指針。 它的工作原理基本相同。 我猜這些家伙只是覺得它不是更好,因為它是一樣的。 它只是在沒有使用宏的情況下編寫的。
這里唯一的優點是你在std :: cout上打印一些信息(但你仍然可以在宏中執行此操作)。 這里有許多不足之處,僅舉幾例:
最好使用std::shared_ptr<T>
和std::unique_ptr
。 他們將繼續管理內存並明確誰是內存的所有者(內存所有權是設計類或整個項目時需要考慮的重要事項)。 但要記住智能指針不是一些奇跡,你仍然可以搞砸一些東西。 看一下這篇文章,找出與他們無關的 十大愚蠢錯誤,避免使用C ++ 11智能指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.