在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
?
答案 0 :(得分:4)
在页面下方有一个关于owner
语义的说明:
注意
owner<T*>
没有超出T*
的默认语义。它可以在不改变使用它的任何代码的情况下使用,也不会影响ABI。它只是程序员和分析工具的指标。例如,如果owner<T*>
是一个类的成员,那么该类最好有一个delete
的析构函数。
它基本上与提议的online course几乎相同。不同之处在于owner
存储指针并且&#34;拥有&#34;虽然它不像std::unique_ptr
那样做任何RAII。当你想要更明确地表明原始指针是拥有指针时,应该使用它。
请注意&#34;语法&#34;这里只是模板类的变量,它不是关键字或其他东西。
答案 1 :(得分:0)
正如Rakete1111所述,owner<T*>
与T *相同。因此,我们可以将owner
作为T的类型别名。
template<class T>
using owner = T;
现在我们可以对代码进行约定,当包含指针的类负责删除指针时,指针由owner
定义。
一个简单的示例,所有者作为原始指针:
owner<int*> p = new int;
*p = 1;
std::cout<<*p; // 1