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 delete
s 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
在 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 beyondT*
. 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 anowner<T*>
is a member of a class, that class better have a destructor thatdelete
s 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