gpt4 book ai didi

c++ - 如何防止对迭代器实例的悬挂引用

转载 作者:行者123 更新时间:2023-11-28 02:42:46 27 4
gpt4 key购买 nike

template<typename T>
class IteratorLike
{
public:
...
boost::shared_ptr<T> operator->() { // return pointer
return shpContainedObj;
}

T& operator*() { // return reference
return *shpContainedObj;
}

private:
...
boost::shared_ptr<T> shpContainedObj;
};

此类不是真正的迭代器,而是封装底层类型 T 的包装类。某些类型的 T 是不可复制的。我意识到如果用户调用 operator*() 然后持有对 T& 的引用,我可能会遇到问题。在这种情况下,shared_ptr shpContainedObj 由于超出范围而被销毁,那么对 T& 的引用将成为悬空引用。

有什么好的建议吗?一个糟糕的解决方案是禁用 operator*() 并且只允许 operator->()

最佳答案

如果您的用户这样做:

std::vector<int> x(10);
int & ref = x.front();
x.clear();

use(ref);

那么你有一个糟糕的用户。

正常的期望(我会有)是我的图书馆不会保护我不这样做。

关于c++ - 如何防止对迭代器实例的悬挂引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413687/

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