假设代码位于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);
}
}
在您的简单情况下,它不会有什么不同,因为(主)函数在创建和使用a
.
如果再多几行代码,a
对象的销毁将发生在 中的if
块的末尾main
,而在一行的情况下,它会在该单行的末尾销毁。但是,如果更复杂的析构函数会对此产生影响,那将是糟糕的设计class A
。
由于编译器优化,性能问题应始终通过使用分析器对具体代码进行测试来回答。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句