可能重复:
C++:空类的对象的大小是多少?
如果该类没有任何数据成员并且只有方法,它仍然有可能发生内存泄漏。首先类方法是对类对象的引用,而对象在分配时仍然需要内存来存储地址。我对么?
class Empty
{
doA()
{
}
};
可能重复:
C++:空类的对象的大小是多少?
如果该类没有任何数据成员并且只有方法,它仍然有可能发生内存泄漏。首先类方法是对类对象的引用,而对象在分配时仍然需要内存来存储地址。我对么?
class Empty
{
doA()
{
}
};
好吧,即使是空类也必须sizeof
大于 0,因此该类仍然会占用空间。原因是唯一的对象应该有唯一的地址。它是否具有成员函数(方法)这一事实无关紧要。
所以这会泄漏:
new Empty; // leaking at least 1 byte
如果该类没有任何数据成员并且只有方法,它仍然有可能发生内存泄漏。
是的,您仍然可以在该类型上泄漏内存。您可以泄漏任何类型,甚至是没有成员的类型。 sizeof(EmptyClass)
永远不会等于 0。请参阅: http: //www.stroustrup.com/#sizeof-empty
从规范:
最派生类的大小应大于零。
内存中的任何对象都需要“空间”。即使是这样的空类也会自动将 Constructor 和 CopyConstructor 投入其中。所有这些都需要记忆。并且忘记delete
该内存将导致确切sizeof(Empty)
字节的内存泄漏。它是 1byte 还是几个都没有关系。
这将取决于您如何分配对象,并且在大多数情况下(或所有情况下),即使该类是空的,如果您使用例如new
或malloc
类似的方法分配它,如果您丢失,您将有内存泄漏指向它的指针。但这也取决于实施。
这是因为new
或malloc
两者都有方法将已分配对象的信息存储在对象的内存空间附近。
如果您根本不使用声明的类,编译器可能会将其优化掉,因此您不会有任何内存泄漏,因为您从未为它分配内存。