假设代码位于if块内,那么在免费存储区中创建对象与仅对其进行一次调用之间有什么区别:

    auto a = aFactory.createA();
    int result = a->foo(5);


并直接在返回的指针上进行调用?

    int result = aFactory.createA()->foo(5);


性能上有什么区别吗?哪种方法更好?

#include <iostream>
#include <memory>

class A
{
public:
    int foo(int a){return a+3;}
};

class AFactory
{
public:
    std::unique_ptr<A> createA(){return std::make_unique<A>();}
};

int main()
{
    AFactory aFactory;
    bool condition = true;
    if(condition)
    {
        auto a = aFactory.createA();
        int result = a->foo(5);
    }
}

最佳答案

在您的简单情况下,这没有什么区别,因为(main)函数在创建和使用a之后立即结束。

如果再接几行代码,则a对象的销毁将发生在ifmain块的末尾,而在单行情况下,它会在单行的末尾被破坏。但是,如果更复杂的class A的析构函数对此有所作为,那将是不好的设计。

由于编译器的优化,性能问题应始终通过在特定代码上使用探查器进行测试来回答。

07-28 04:38