unique_ptr具有右值删除器的构造函数返回 null
unique_ptr constructor with rvalue deleter returns null?
这是我用来理解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';
有人可以解释为什么null
是为u5
和u6
而印刷的,而不是为u7
印刷的吗?提前感谢!
正如 Phil1970 在他的评论中指出的那样,std::unique_pointer
实例在分配给另一个实例后变得(等效于(nullptr
(使用 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';
}
执行时,您会看到u5
和u6
在实例化后立即为"不为空"。
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- 为什么使用 std::istream_iterator 构造函数返回指针
- 如何从构造函数返回错误代码?
- unique_ptr具有右值删除器的构造函数返回 null
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 从构造函数C++返回后丢失成员变量的值
- 复制构造函数返回临时对象
- C++从构造函数返回值时出错
- 复制构造函数错误:从构造函数返回值
- 是的,构造函数返回是当前实例,但我们不能使用返回类型.是真的吗
- 乍一看,构造函数返回了一个对象
- 复制构造函数返回的值
- 使用默认构造函数返回临时对象时,Destuctor调用了两次
- 纯虚拟方法使用C++中的复制构造函数返回类类型
- 从函数和复制构造函数返回的对象
- 表达式节点的模板构造函数返回错误的值
- "using" (typedef) 指针:它的默认构造函数返回 nullptr?
- 构造函数返回错误,动态内存c++
- 为什么我们不能从构造函数返回任何内容?