是 std::unique_ptr
std::unique_ptr
Visual Studio 2010 SP1 中的实现相关行为
Visual Studio 2010 SP1 中的行为表明它的 std::unique_ptr 实现需要 Thing 的完整定义。这不是标准要求,而是特定于实现的选择。
标准库中的部分异常
虽然大多数 C 标准库模板需要完整类型,但 std ::shared_ptr 和 std::unique_ptr 是部分例外。它们的一些函数可以用不完整的类型实例化,因为它们在支持诸如指向实现的指针(pimpl)模式之类的习惯用法中发挥着作用。但是,在某些操作中使用不完整类型可能会导致未定义的行为,例如删除不完整的对象。
不同操作的类型完整性要求
std::unique_ptr 和std::shared_ptr 在不同情况下需要完整的类型。例如, ~std::unique_ptr 需要其析构函数使用完整类型,而 std::unique_ptr(A*) 如果从中接管指针,则允许使用不完整类型。表格总结了这些要求:
Operation | std::unique_ptr | std::shared_ptr |
---|---|---|
Default constructor | incomplete | incomplete |
Copy constructor | - | incomplete |
Move constructor | incomplete | incomplete |
Destructor | complete | incomplete |
Constructor from pointer | incomplete | complete |
Copy assignment | - | incomplete |
Move assignment | complete | incomplete |
Reset without argument | complete | incomplete |
Reset with argument | complete | complete |
总之,虽然 std::unique_ptr 本身并不需要 C 标准中的完整类型定义,但某些实现(如 Visual Studio 2010 SP1)可能会强加这样的要求。重要的是要了解所使用的实现的具体要求,以避免未定义的行为。
以上是`std::unique_ptr` 需要 T 的完整定义吗?的详细内容。更多信息请关注PHP中文网其他相关文章!