typedef 智能指针是不好的做法吗?

Is it bad practice to typedef a smart pointer?

我现在的项目中使用的是智能指针,使用的时候需要敲很长的代码,看起来很麻烦。

因为我希望我的代码更清晰、更易于理解,所以我开始使用类型定义智能指针,如下所示:

typedef std::unique_ptr<System> SystemPtr;

所以我的问题是,typedef 智能指针是不好的做法吗?

没什么问题,但你选择的名字太糟糕了。阅读的人不知道这是共享指针、唯一指针、侵入式引用计数 com 指针,还是只是指向 System.

的原始指针

如果你真的需要简洁,

template<class T>using up=std::unique_ptr<T>;

在使用时比您的计划 up<System> 多一个字符,并且更清楚地表明这是一个唯一的指针,并且不需要每个类型的 typedef。此外,它在某些情况下会导致双关语。

正如其他人所提到的,它在语法上没有任何错误。我只想补充一点,必须寻找或依赖诸如 Intellisense 之类的东西才能在大型项目中轻松找到定义,这可能会令人不快。程序员依靠 "in the zone" 来完成他们最好的工作。即使是像花 60 秒来追踪一个 typedef 这样简单的事情也会毁了这个节奏。

出于这样的原因,我觉得在像您这样的情况下,一般而言,最好不要随意应用 typedef。您应该能够通过遍历到关联范围的顶部轻松快速地找到变量的类型。

事实上你的类型并没有那么长(高级元类型可以是多行)。