gpt4 book ai didi

c++ - 防止 std::move 对象?

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:16 36 4
gpt4 key购买 nike

我正在尝试创建一个非空 unique_ptr

template <typename T>
class unique_ref {
public:
template <class... Types>
unique_ref(Types&&... Args) { mPtr = std::make_unique<T, Types...>(std::forward<Types>(Args)...); }
T* release() && { return mPtr.release(); }
T* release() & = delete;

private:
std::unique_ptr<T> mPtr;
};

我的目标是仅当 unique_ref 是临时的时才允许 release()

问题是有人可以使用 std::move() 来“绕过”这个:

unique_ref<int> p;
int* p2 = std::move(p).release();

有没有办法防止它被移动

最佳答案

就重载决策而言,无法区分纯右值(临时值)和无右值(std::move 的结果)。

并且没有办法阻止 std::move 将左值转换为 xvalue。

release 不是非空保证“唯一指针”可以支持的操作。移动构造/分配也不是。据我所知,保证的唯一方法是使指针不可移动,并使复制操作分配深拷贝。

关于c++ - 防止 std::move 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55661068/

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