std :: shared_ptr / std :: make_shared的语法较短

时间:2014-04-09 11:53:14

标签: c++11 shared-ptr

我厌倦了撰写std::shared_ptr<MyClass>std::make_shared<MyClass>,在考虑this后,我希望找到更短的语法。

对于我的短期科学项目,我经常只需要非常快速地生成代码并且更喜欢严格的语法 - 只是不要对它进行评论;)

所以我想这个:

#define PTR(X) std::shared_ptr<X>
#define NEW(X) std::make_shared<X>

PTR(MyClass) p = NEW(MyClass)(args)

或关于此:

template<typename T> using ptr = std::shared_ptr<T>;
template<typename T, typename... Args>
ptr<T> make(Args... args) {
     return std::make_shared<T>(args...);
}

ptr<MyClass> p = make<MyClass>(args);

您认为这些方法的优点/缺点是什么?还有更优雅的方式吗?

4 个答案:

答案 0 :(得分:7)

using std::make_shared; // at file scope, after all #includes
auto p = make_shared<Bob>(a,b,c);

但我个人喜欢std::

使用auto是好的,因为在同一行重复两次类型是不必要的噪音。

答案 1 :(得分:4)

你可以使用自动

auto p = std::make_shared<MyClass>(args);

答案 2 :(得分:4)

  

您认为这些方法的优点/缺点是什么?

他们太可怕了。它相当于

#define R return

我看过,因为有人懒得写return

问题在于,在软件开发中,大部分时间花在思考如何做和代码维护上。通过使用这样的宏,你正在削弱维护,使维护者的生活更加艰难。

  

有更优雅的方式吗?

使用正确的IDE,设置自动完成以触发一个字符,然后选择您需要的任何内容。


好的,我跳过了模板示例。

您正在引入新符号,并编写typedef以使自己编写更少的代码。最好的代码是没有写的代码。

如果有人打开您的源文件,他还必须打开您定义这些功能和模板别名的标题。这会增加维护成本。

看到std::shared_ptr,人们立即知道它是什么。

另外,你会为std::unique_ptr做些什么?添加make1ptr1

答案 3 :(得分:-4)

如前所述,使用auto和expand命名空间。

using namespace std;
....

auto allocatedInstance = make_shared<Type>(args);