Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 键入智能指针是一种不好的做法吗?_C++_Smart Pointers - Fatal编程技术网

C++ 键入智能指针是一种不好的做法吗?

C++ 键入智能指针是一种不好的做法吗?,c++,smart-pointers,C++,Smart Pointers,我在当前的项目中使用智能指针,在使用它们时必须键入长行代码,这似乎非常麻烦 因为我希望我的代码更干净、更容易理解,所以我开始键入如下智能指针: typedef std::unique_ptr<System> SystemPtr; typedef std::unique_ptr SystemPtr; 所以我的问题是,键入智能指针是一种不好的做法吗?它没有什么问题,但您选择的名称很糟糕。某个正在阅读的人不知道这是共享指针、唯一指针、入侵引用计数com指针还是指向系统的原始指针 如果你

我在当前的项目中使用智能指针,在使用它们时必须键入长行代码,这似乎非常麻烦

因为我希望我的代码更干净、更容易理解,所以我开始键入如下智能指针:

typedef std::unique_ptr<System> SystemPtr;
typedef std::unique_ptr SystemPtr;

所以我的问题是,键入智能指针是一种不好的做法吗?

它没有什么问题,但您选择的名称很糟糕。某个正在阅读的人不知道这是共享指针、唯一指针、入侵引用计数com指针还是指向
系统的原始指针

如果你真的需要简洁

template<class T>using up=std::unique_ptr<T>;
templateusing up=std::unique\u ptr;

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

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

出于这样的原因,我觉得在像您这样的情况下,简单地说,最好不要随意应用typedef。通过遍历相关作用域的顶部,您应该能够轻松快速地找到变量的类型


老实说,你的类型没有那么长(高级元类型可以有多行长)。

我有一个同事,他对所有内容都进行了排版和缩写,因为他讨厌打字。请不要做那个人。我真的不介意打字。但似乎键入智能指针会使代码看起来更干净,我只是不确定这样做是否正确。这种问题可能会引起争论。需要注意的一点是,您在typedef中使用了唯一的指针,但名称并没有反映这一点。从语义上讲,查看
unique_ptr
shared_ptr
之间的区别非常重要。如果你打算这样做,我建议你制定自己的惯例来区分它们。也许是
SystemPtrU
SystemPtrS
。就个人而言,为了清晰起见,我只会使用整个原始类型。例如,您可以使用
auto
功能,为了减少键入量。@paddy考虑到
unique\u ptr
应该是默认选择,而
shared\u ptr
应该只在必要时使用,那么合理的命名约定可能是
SystemPtr
sharedsystemptur
,OP的选择很好。我认为在typedef中添加一个后缀就足够了显示指针的类型。但是你的答案是干净的,我不必担心typedef。