c++ - 静态方法返回类的 shared_ptr

标签 c++ c++11

在下面的片段中,MyClass有一个返回其共享指针的静态方法。为了使代码简洁,我们使用别名 MyClassPtr对于 std::shared_ptr<MyClass> .

然而,为了实现这一点,我们在声明共享指针别名之前声明类,然后在实际的类声明之后。看起来很冗长。

有什么方法可以重组代码,这样

  • 保留MyClassPtr别名(在整个项目中共享)
  • 无需“声明”MyClass两次

代码如下:

class MyClass;
using MyClassPtr = std::shared_ptr<MyClass>;

class MyClass {
public:
    static MyClassPtr createMyClassInstance();

private:
/*Other members & methods*/
}

我对当前的实现没意见。但如果代码可以改进,我想寻求有经验的人的建议。

最佳答案

您的问题有些含糊,因为您问的是如何简化代码,但您没有提供任何实际代码,仅提供了类定义的概要。相反,我尝试回答更明智的问题,即如何改进您的代码。我建议

  1. 避免使用别名 MyClassPtr,它不是必需的(如果您使用 auto,则不应使用太多)但更重要的是减少冗长,从而提高可读性代码,因为从它的名称中看不出 MyClassPtr 是指 shared_ptr

    如果你坚持要对智能指针进行简写,你可以在类定义之后定义它,从而避免前向声明

  2. MyClass::createMyClassInstance 重命名为更冗长的名称,我建议 MyClass::createSharedPtr(不需要在 MyClass函数名)。

  3. 不要忘记类定义后的 ;

因此,

class MyClass
{
public:
    static std::shared_ptr<MyClass> createSharedPtr();    
private:
    /* Other members & methods */
};

using MyClassSharedPtr = std::shared_ptr<MyClass>;  // optional

恕我直言,好的代码应该是不言自明的,因此不一定最简洁/简短,但必须避免冗余。

关于c++ - 静态方法返回类的 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46085660/

相关文章:

c++ - 为什么在列表初始化函数参数时显式构造函数不匹配?

c++ - g++ vs intel/clang 参数传递顺序?

C++11 实验,为什么我不能使用某些功能?

c++ - 列表上的冒泡排序——在计算上花费了太多时间

c++ - 在 C++ 中创建一个简单的数据包路由器,如何跟踪 'clients'?

c++ - 在 C++ 中编译类的代码时,控制流的顺序是什么?

c++ - 当两个成员都在同一个类中时出现错误 "a nonstatic member reference must be relative to a specific object"

c++ - Armadillo - 如何提取行?

c++ - 如何在 QA 计算机上捕获堆栈跟踪

c++ - 仅更改 C++ 模板中类型的一部分