gpt4 book ai didi

c++ - 安全地传递指针所有权异常

转载 作者:行者123 更新时间:2023-11-30 05:38:10 27 4
gpt4 key购买 nike

我有一种情况,传递原始指针的所有权可能会引发异常。有几个这样的 block ,将每个 block 包装在 try/catch 中只是为了删除不被接受的指针是不雅的。相反,我使用的是 unique_ptr<A>使用 RAII 管理我的指针:

unique_ptr<A> a(new A());
obj.take(a.get()); // pass ownership to obj, might throw
a.release(); // release pointer since obj is now responsible

所以这背后的想法是在当前函数中保留原始指针的所有权,直到它被成功传递给somebody.take()。 .这对我来说似乎是一个非常好的模式,但真的是这样吗?我忽略了任何陷阱吗?

最佳答案

好吧,对于任何想知道的人,这就是我现在所做的安全传递指针所有权的事情:

class C {
A *mem_p = nullptr;

/** take ownership exception-safely */
void take(unique_ptr<A> &&a) {
dangerous_stuff(); // may throw exception
this->mem_p = a.release();
}

~C() { delete mem_p; }
}

void some_fun() {
A *ptr = new A();
C obj;
obj.take(unique_ptr<A>(a)); // either obj owns ptr or it is freed
}

我喜欢它的地方在于它使所有权语义几乎明确,或者至少它提醒 take() 的任何用户注意论点。

关于c++ - 安全地传递指针所有权异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898837/

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