gpt4 book ai didi

用于删除和重置指针的 C++ 模板函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:12 25 4
gpt4 key购买 nike

我刚遇到一个关于指针的小问题。因为我想用一种快速简便的方法在一行中完成此任务:

...
delete pointer;
pointer = 0;
...

我只是用一个接受任何类型指针的模板方法快速设置了一个简单的头文件。它看起来像这样:

#ifndef P_DELETE_H
#define P_DELETE_H

template <typename T>
void pDelete(T* pointer) {
if (pointer) {
delete pointer;
pointer = 0;
}
}

#endif

但是,结果不符合我对对象被删除和指针被重置的预期。相反,似乎只有对象被删除,但将其设置为零没有任何效果(这正是我所需要的)。如果这里有人能让我轻松一点并解释这种行为,我会非常感激!

更新:

正如答案所解释的那样,使用 std::unique_ptr 和 std::shared_ptr 比使 this 指针无效更安全。

但是如果你真的需要按照我的要求走,下面的代码就可以了:

template <typename T>
inline void pDelete(T*& pointer) {
if (pointer) {
delete pointer;
pointer = 0;
}
}

然而,这通常使用起来不安全,即使它正确地删除并使所有实例上的指针无效(快速测试揭示了这一点)。

感谢大家提供的信息丰富的答案!

最佳答案

您正在寻找的解决方案是:

delete pointer;
pointer = nullptr;

是的,只需内联编写该代码即可。真的没有理由在某个地方引入另一个函数模板,人们必须查找才能弄清楚它实际上做了什么,只是为了节省一行代码。

以上内容可读性强,易于理解。

关于用于删除和重置指针的 C++ 模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41225738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com