C++:指针,然后是圆括号 - 这是什么意思



我必须对别人写的一些函数进行谷歌测试,我遇到了以前从未有过的情况。请参阅下面的伪代码:

typedef boost::shared_ptr<CSomeClass> CSomeClass_sh_ptr;
    CSomeClass_sh_ptr getSomething(int A)
    {
        if(A>3)
        {
            return CSomeClass_sh_ptr();
        }
        CSomeClass_sh_ptr pointerToCSomeClass = otherPointerToCSomeClass;
        return pointerToCSomeClass;
    }

所以我的问题是 - 什么

CSomeClass_sh_ptr()

boost::shared_ptr<CSomeClass>()

意味 着?

在您的上下文中,CSomeClass_sh_ptr()CSomeClass_sh_ptr 的默认构造实例。换句话说,默认构造boost::shared_ptr<CSomeClass> .

请注意,boost::shared_ptr<SomeClass>不是指针。它是一种管理指针的类型。默认构造时,其托管指针为 NULL 或 nullptr

你的误解是你认为boost::share_ptr<CSomeClass>是一个指针,而它实际上是一个管理指向CSomeClass的指针class,因此boost::share_ptr<CSomeClass>()表示该类对象的构造。

类型的名称,后跟一个(),表示创建该类型的临时值初始化。 在您的情况下,正如其他人指出的那样,类型是类模板的实例化,因此是一个类。 对类进行值初始化是调用其默认构造函数(如果它有一个)或零初始化它(如果它没有构造函数)。 (boost::shared_ptr有一个默认构造函数,所以它被调用)。 如果你实际上有一个指针,值初始化它就是零初始化它,这将导致一个空指针。 (boost::shared_ptr的默认构造函数模仿指针行为的这一方面;其默认构造函数创建一个行为类似于空指针的共享指针。

最新更新