标题所说的问题,静态函数?或者立即删除的对象的功能?
我知道在实际情况下,差异是完全不可察觉的,但我仍然想知道哪种更有效地节省内存。我真的不介意“新”和“删除”命令给出的开销。
MyClass::staticFunction();
...或
myObject = new MyClass;
myObject->normalFunction();
delete myObject;
编辑:第二个代码也可能是MyClass().normalFunction();
傻......
这里有一些事情需要考虑;
答案 0 :(得分:6)
目前看来,这一切都没有任何意义。真正的解决方案是提供 free 函数(命名空间范围内的函数),因为 这就是 的免费函数。
哦,既然你问过:如果调用这个单一函数在代码中有明显的开销,那么你只能通过仔细的分析找到它。分析也可以回答你的问题,哪种方式更快 但首先要确保您的代码易于阅读且易于维护。然后优化这将比修复过早的微“优化”代码容易得多。您应该采用的唯一早期优化是那些能够产生最佳数据结构和算法的优化。
(请注意,new
和delete
很可能比实际所做的具有更大的开销,更不用说调用它了。)
答案 1 :(得分:4)
实际上,它们确实是享受类范围的全局函数
我认为这是现实。
它没有多大区别。但是,以下内容会使 lot 更有意义:
{
MyClass myObject;
myObject.normalFunction();
}
甚至,
MyClass().normalFunction();
为什么还要为创建一个堆分配的对象实例而烦恼呢?
答案 2 :(得分:1)
如果不在特定平台上尝试(或了解该平台的详细信息),我们不能肯定地说,但我们可以说静态的不会慢于新的&删除。
答案 3 :(得分:0)
与免费函数相比,调用非虚拟成员函数与类静态函数相比没有任何开销,因为绑定在编译时被解析。唯一的区别是成员函数为this
指针获得了一个额外的参数,但是使用静态和自由函数你必须以某种方式传递对象,所以它是相同的。
答案 4 :(得分:0)
如果代码足够复杂,您认为它需要在自己的类中,那么这表明存储在对象中的多个方法和状态。您要求将其与使用多个函数进行比较,并通过作为参数传递的隐含状态进行比较。如果方法之间存在大量共享状态,则使用对象是合理的。如果没有,使用多种功能是合理的。
答案 5 :(得分:0)
对于范围界定,您可能更喜欢使用命名空间。
另一方面,由于您要求内存效率,我可以看到您可能更喜欢该对象的一个原因。如果您要考虑分配的内存量,将其封装在对象成员中听起来像是一种在之后释放它们的方法。