cpp核心指南中的所有者<t *> p语法

时间:2017-07-13 07:28:09

标签: c++ c++14 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

2 个答案:

答案 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