gpt4 book ai didi

c++ - 在这种情况下如何使用智能指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:02 26 4
gpt4 key购买 nike

我想在以下情况下使用智能指针:

   SOME_STRUCT* ptr = new SOME_STRUCT;
ptr->SOME_MEMBER = new BYTE[100];
CallSomeAPI(ptr);

现在 API 可以返回错误或成功通过,但在这两种情况下我都想删除对象,一种方法是在错误退出和正常退出期间编写 delete 语句。

但是我如何为这些指针使用智能指针呢?我所说的智能指针是指 unique_ptr、shared_ptr 等。无论哪个都可以工作!

谢谢!

最佳答案

您可以为 unique_ptr 编写自定义删除器。

struct my_deleter {
void operator()(SOME_STURCT* ptr) const {
delete[] ptr->SOME_MEMBER;
delete ptr;
}
};

using my_ptr = std::unique_ptr<SOME_STRUCT, my_deleter>;

我建议将 new SOME_STRUCT; 更改为 new SOME_STRUCT{}; 以默认将 SOME_MEMBER 初始化为 nullptr.

我对这个解决方案不是 100% 满意,所以或许可以查看 scope_guard 或为您的结构编写一个包装器类。

关于c++ - 在这种情况下如何使用智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30255170/

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