owner<T*> cpp 核心指南中的 p 语法

owner<T*> p syntax in cpp core guidelines

在 cpp 核心指南中:Example of non owning raw pointer 我不明白以下代码:

 template<typename T>
class X2 {
    // ...
public:
    owner<T*> p;  // OK: p is owning
    T* q;         // OK: q is not owning
};

这是什么语法owner<T*> p

页面下方有一条关于 owner 语义的说明:

Note owner<T*> has no default semantics beyond T*. It can be used without changing any code using it and without affecting ABIs. It is simply a indicator to programmers and analysis tools. For example, if an owner<T*> is a member of a class, that class better have a destructor that deletes it.

基本和提议的差不多std::observer_ptr。不同之处在于 owner 存储一个指针,而 "owns" 它存储一个指针,尽管它不像 std::unique_ptr 那样执行任何 RAII。当您想更明确地表明原始指针是拥有指针时,应该使用它。

注意这里的"syntax"只是一个模板变量class,不是关键字什么的

如 Rakete1111 所述,owner<T*> 与 T* 相同。所以我们可以将 owner 作为 T.

的类型别名
template<class T>
using owner = T;

现在我们可以为我们的代码制定一个约定,即指针由 owner 定义,而包含它们的 class 负责删除它们。

所有者充当原始指针的简单示例:

owner<int*> p = new int;
*p = 1;
std::cout<<*p; // 1