是 std::unique_ptr
在 C 编程中,标准库中模板的行为通常取决于它们实例化的类型的完整性。虽然大多数模板需要完整类型,但 std::unique_ptr 和 std::shared_ptr 是例外。
std::unique_ptr 和不完整类型
std::unique_ptr 允许不完整在某些上下文中类型,但不是全部。具体来说,在以下情况下它需要完整类型:
否则,它可以处理不完整的类型,例如for:
std::shared_ptr 和不完整类型
std::shared_ptr 遵循与 std::unique_ptr 类似的规则,但有两个关键区别:
在以下情况下需要完整类型:
实现的影响
这些完整性要求意味着 std::unique_ptr 和 std::shared_ptr 的不同实现可能会以不同的方式处理不完整类型。例如,Visual Studio 2010-SP1 实现可能需要类型 T 的完整定义来实例化 std::unique_ptr
标准要求
std::unique_ptr 和 std::shared_ptr 的标准没有明确声明它们不能使用不完整的类型。然而,在某些情况下对其行为的要求意味着完整的类型是必要的。 C 标准对此进行了解释,其中规定某些操作的有效性取决于模板实例化类型的完整性。
总而言之,而 std::unique_ptr 和 std::shared_ptr 允许不完整类型在特定的上下文中,它们需要完整的类型来执行某些操作。此要求源于标准的规范,可能会影响不同实现中模板的行为。
以上是`std::unique_ptr` 和 `std::shared_ptr` 何时需要 T 的完整定义?的详细内容。更多信息请关注PHP中文网其他相关文章!