gpt4 book ai didi

c++ - 如何强制指针的非所有权?

转载 作者:太空狗 更新时间:2023-10-29 21:20:32 26 4
gpt4 key购买 nike

我有一个方法,它在 auto_ptr 中创建一个对象,将那个 auto_ptr 粘贴到一个 vector 中,然后返回一个原始指针到为方便起见对象。

这个设计的问题在于它返回一个原始指针。调用者很容易误解这个指针是非拥有的,并将这个调用的结果包装到一个托管指针中,当内存被双重释放时,这会导致内存访问冲突。

int main (void)
{
{
std::auto_ptr<int> foo = ThisMethodReturnsNonOwningPtr(); // Uhoh
}

ThisMethodUsesThePtr(); // Crash

return 0;
}

理想情况下,我想返回一个不能转换为托管指针的指针之类的东西,这样我就不必担心调用者会这样做。

或者,我可能只是返回一个数组的索引,但能够传递指针真的很方便,谁知道我稍后可能会洗牌或排序数组。

最佳答案

首先,如果你可以将一个 auto_ptr 插入到一个 vector 中,是时候升级你的编译器或你的库。这一直不合法自 1998 年第一个标准以来。如果你有 C++11,你可以使用 std::unique_ptr;如果没有,你需要保留原始指针在 vector 中。在这两种情况下,您都需要包装 vector :使用 std::unique_ptr,这样客户端就不必做任何想得到实际指针的东西,以及原始指针,这样您就可以管理与它们关联的内存。

对于其余部分,只需返回一个原始指针。如果你有那些四处删除随机指针的程序员,你完蛋了反正;大多数时候,原始指针用于导航,并且就像指向具有静态生命周期的对象一样其他任何事情。

关于c++ - 如何强制指针的非所有权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411792/

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