"owning" 在编程语境中是什么意思?

What does "owning" mean in the context of programming?

cppreference用它来形容 std::string_view:

devtutsodocumentation 也用它来描述 std::string_view:

C++17 introduces std::string_view, which is simply a non-owning range of const chars, implementable as either a pair of pointers or a pointer and a length.

various other questions and answers 在这里 参考它,但我找不到任何解释它的意思。

您可以拥有资源,即任何数量有限的资源。这通常是内存或系统句柄。拥有资源的任何人都有责任在使用完后释放它。

std::unique_ptrstd::shared_ptrowning 包装器的示例。当它不再使用时,它会释放它们的内存。任何其他 RAII class.

也是如此

std::basic_string_viewnon-owning,这是一种很好的说法,它不以任何方式绑定到字符串的实际生命周期,而且,如果你不小心,如果字符串重新分配,它可能会悬空。

“拥有X”意味着对X的生命周期负责。

std::string 的情况下,class 包含 char 的数组。 std::string class 负责分配和释放char数组;字符串对象一直拥有这个数组。

与此相反 std::string_view 只“知道”这样一个数组;它不会对其进行任何分配或解除分配。

好处是你不需要复制数组,这可能会变得很昂贵,缺点是如果你不小心,数组可能会在你停止使用之前被释放 std::string_view 这会导致未定义的行为,因此结果可能是您的程序崩溃。

说:

A span<T> is:

...

  • A non-owning type (i.e. a "reference-type" rather than a "value type"): It never allocates nor deallocates anything and does not keep smart pointers alive.

链接的答案很好地解释了参考 type 是什么。

std::string_view 和 std::span 是引用 semantics 的对象。 isocpp's faq 提供了很好的解释。