gpt4 book ai didi

c++ - 具有右值删除器的 unique_ptr 构造函数返回 null?

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

这是我用来理解 std::unique_ptr 行为的代码片段:

std::default_delete<int> d;
std::unique_ptr<int> u1;
std::unique_ptr<int> u2 (nullptr);
std::unique_ptr<int> u3 (new int);
std::unique_ptr<int> u4 (new int, d);
std::unique_ptr<int> u5 (new int, std::default_delete<int>());
std::unique_ptr<int> u6 (std::move(u5));
std::unique_ptr<int> u7 (std::move(u6));
std::unique_ptr<int> u8 (std::auto_ptr<int>(new int));

std::cout << "u1: " << (u1?"not null":"null") << '\n';
std::cout << "u2: " << (u2?"not null":"null") << '\n';
std::cout << "u3: " << (u3?"not null":"null") << '\n';
std::cout << "u4: " << (u4?"not null":"null") << '\n';
std::cout << "u5: " << (u5?"not null":"null") << '\n';
std::cout << "u6: " << (u6?"not null":"null") << '\n';
std::cout << "u7: " << (u7?"not null":"null") << '\n';
std::cout << "u8: " << (u8?"not null":"null") << '\n';

有人可以解释为什么 u5u6 打印了 nullu7 没有打印吗?提前致谢!

最佳答案

正如 Phil1970 在他的评论中指出的那样,std::unique_pointer 实例在分配给另一个实例(使用 std: :move 如您的代码示例所示)。实际上,这就是 std::unique_ptr 的用途。它是独一无二的。

现在考虑这段代码:

#include <memory>
#include <iostream>

int main()
{
std::default_delete<int> d;
std::unique_ptr<int> u1;
std::cout << "u1: " << (u1 ? "not null" : "null") << '\n';

std::unique_ptr<int> u2(nullptr);
std::cout << "u2: " << (u2 ? "not null" : "null") << '\n';

std::unique_ptr<int> u3(new int);
std::cout << "u3: " << (u3 ? "not null" : "null") << '\n';

std::unique_ptr<int> u4(new int, d);
std::cout << "u4: " << (u4 ? "not null" : "null") << '\n';

std::unique_ptr<int> u5(new int, std::default_delete<int>());
std::cout << "u5: " << (u5 ? "not null" : "null") << '\n';

std::unique_ptr<int> u6(std::move(u5));
std::cout << "u6: " << (u6 ? "not null" : "null") << '\n';

std::unique_ptr<int> u7(std::move(u6));
std::cout << "u7: " << (u7 ? "not null" : "null") << '\n';
}

executed您会看到 u5u6 在实例化后立即“不为空”。

关于c++ - 具有右值删除器的 unique_ptr 构造函数返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218684/

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