在cpp核心指南中,owner<T*> p语法的含义是什么?

8
在cpp核心指南中:非所有原始指针的示例 我不理解以下代码:
 template<typename T>
class X2 {
    // ...
public:
    owner<T*> p;  // OK: p is owning
    T* q;         // OK: q is not owning
};

这个语法 owner<T*> p 是什么意思?它涉及到IT技术。

2
p 是类 owner 的一个实例,它是一个模板并接受参数 T*?这是你在问什么吗? - Adrian Maire
它是否链接到这个 - sop
是的!现在我真正明白它来自哪里了!这在微软库中声明为一个空模板。 - arenard
2个回答

10

页面下方有关于owner语义的注释:

注意 owner<T*>除了T*之外没有默认的语义。它可以在不改变使用它的任何代码和不影响ABI的情况下使用。它只是一个指示程序员和分析工具的指示符。例如,如果owner<T*>是类的成员,则该类最好有一个析构函数来delete它。

它基本上与建议中的std::observer_ptr几乎相同。区别在于owner存储一个指针并“拥有”它,尽管它不像std::unique_ptr那样执行RAII。当您想要更明确地表示原始指针是拥有指针时,应使用它。

请注意,这里的“语法”只是模板类的一个变量,它不是关键字或其他东西。


1
所以,“owner”不是C++关键字,它只是在其他地方定义的模板吗? - arenard
@user3880722 没错 :) - Rakete1111
@Galik 它基本上也是一样的,什么都不做。 - user253751
@Galik 我明白你的意思。语义不同,但它们做的事情完全相同。 - Rakete1111

1
正如Rakete1111所提到的,owner<T*>与T*相同。因此,我们可以将owner作为T的类型别名。
template<class T>
using owner = T;

现在我们可以为我们的代码制定一个惯例,即当包含指针的类负责删除它们时,指针由owner定义。
一个简单的例子是owner充当原始指针:
owner<int*> p = new int;
*p = 1;
std::cout<<*p; // 1


2
请不要仅仅发布代码作为答案,还要提供解释您的代码是如何解决问题的。带有解释的答案通常更有帮助和更高质量,并且更有可能吸引赞同。 - Mark Rotteveel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接