c++ - 为什么静态指针返回函数中有 "static"关键字?

标签 c++

我很难理解为什么标题中只有一个关键字“static”(我理解该代码的作用以及如何在 API 中使用它

//Header
class A 
{
    static A * create();
    bool init();

};


A* A::create()
{
    A * ob = new (std::nothrow) A();
    if(A && a->init()){
        A->autorealease();
        return A;
    }
    SAFE_DELETE(A);
    return nullptr;
}

像这样使用A* testobj = A::create();(如果它没有保存在某个( vector )数组中,它将超出范围,因此它将被引擎清理)。

谢谢。

最佳答案

I am askign the reason of using static pointer instead of just returning pointer

成员函数是静态的,但它返回的指针不是静态的。该函数创建的对象是动态分配的,应该以与删除其他对象相同的方式删除。

成员函数被标记为static的原因是让您无需创建对象实例即可运行它,即

A* myObj = A::create();

相对于

A obj;
A* objPtr = obj.create();

这从一开始就违背了定义工厂函数的目的。

在按照 C++ 语法定义成员函数时,关键字 static 不会重复:编译器已经从声明中知道 A::createstatic,因此无需重复此信息。

关于c++ - 为什么静态指针返回函数中有 "static"关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43942913/

相关文章:

C++:OpenMP 中的私有(private)静态变量

c++ - 如何将 API 从 lex yacc 设置为 Program

c++ - 错误 C2899 : typename cannot be used outside a template declaration

c++ - 函数在后台运行 C++

c++ - 从用户输入中获取 mm dd yyyy

c++ - 如何检查数组索引是否存在

c++ - 使用 Flex 和 Bison 在脚本引擎中实现 eval 和 load 函数

c++ - 通过继承实现纯虚函数

c++ - 未定义对 '_WSAStartup@8' 的引用。如何将库与 NetBeans 链接起来?

c++ - 在 C++ 中使用枚举作为数组索引