gpt4 book ai didi

c++ - 检测对象是否为智能指针所有

转载 作者:行者123 更新时间:2023-11-30 00:57:11 31 4
gpt4 key购买 nike

我有一个派生自 enable_shared_from_this 的类和一个通过调用 shared_from_this() 返回共享指针的方法。我想在该方法中检测对象是否由 shared_ptr 拥有,如果不是则抛出。我试过这样的事情:

shared_ptr<T> getPointer() {
shared_ptr<T> ptr(shared_from_this()));
if(!ptr)
throw "Not owned by smart pointer"
return ptr;
}

但这不起作用,因为在 ptr 的构造过程中抛出了一个错误的弱指针异常。还有别的办法吗。

最佳答案

查看标准中的接口(interface),我看不出有什么可以进行像样的测试。当然,您总是可以解决这个问题:

std::shared_ptr<T> getPointer() {
try {
return this->shared_from_this());
}
catch (std::bad_weak_ptr const&) {
throw std::runtime_error("not owned by smart pointer");
}
}

当然,您也可以不捕获 std::bad_weak_ptr 异常并让原始异常转义该函数。

顺便说一句,当抛出异常时,强烈建议抛出派生自 std::exception 的异常。如果你遇到了一个你一无所知的异常,你会诅咒创建它的人,因为获取异常以找出它是关于什么的并不总是那么容易(尽管调试器可以提供帮助,如有必要,可以设置一个中断指向抛出异常的内部函数)。只写 what() 的结果要容易得多。

关于c++ - 检测对象是否为智能指针所有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735260/

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