c++中多个构造函数的内存使用
Memory usage of multiple constructors c++
我正在为任天堂DS(带有4MB RAM)编写c++代码。我创建了一个button类来在UI中显示按钮。为了方便,我有四个独立的构造函数。我可以把它们都压缩到一个结构中,但这很不方便,因为每次构造它时都需要使用所有的参数。我的问题是
当程序运行时,多个重载构造函数会占用每个对象更多的内存吗?或者编译器会自动剥离每个对象不需要的其他3个不必要的构造函数吗?任何帮助都是感激的。下面是带有解释的构造函数的实参:
Button::Button(int x, int y, const char * const label)
{
//Set visibility to true as a default
//Set length to String length
}
Button::Button(int x, int y, const char * const label, bool isVisible)
{
//Set the length to the string length
}
Button::Button(int x, int y, const char * const label, int length)
{
//set visibility to true as a default
}
Button::Button(int x, int y, const char * const label, int length, bool isVisible)
{
//All the variables are specified using constructor
}
虽然我同意其他的答案,但减少构造函数的数量不会为您节省任何对象存储成本,您可能应该只是为了方便而这样做。
我可以把它们都压缩成一个结构,但是这会很不方便,因为每次构造它时我都需要使用所有的参数。
不必这样:这是默认形参的作用。在头文件中创建构造函数的原型:
class Button {
Button (
int x,
int y,
const char * const label,
int length = -1,
bool isVisible = true
);
注意最后两个参数后面的=
。这意味着您不必提供这些值,如果不提供,则将使用该值。所以:
new Button(1, 2, "hello");
new Button(1, 2, "hello", 5, false);
都很好。您通常定义构造函数,尽管这里的length
字段有点特殊;如果它可能取决于用户提供的label
或的长度,则需要知道其中的区别。因此,在初始化列表中,如果与length
参数对应的成员字段称为length
(不是我最喜欢的做法,但在这里无关紧要):
length (length > 0 ? length : label.length())
length
将初始化用户参数g,如果它大于0,默认值是-1,所以如果没有提供该参数g,将使用label.length()
。
请注意,参数必须按顺序进行,因此您应该考虑哪些最有可能被使用。如果在这种情况下,您希望允许指定其中一个默认参数而不指定另一个,则需要两个构造函数。
构造函数的数量不会改变每个对象所使用的内存。添加构造函数不会影响对象的大小。
不,代码使用的内存不是每个对象而是每个类。不管你有多少个类的实例(对象),只会有一个代码副本。
只有非静态数据成员(成员变量)是每个实例的
相关文章:
- 从构造函数抛出异常时如何克服内存泄漏
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 在构造函数中分配内存失败是如何冒泡的
- 动态分配的内存构造函数
- 构造函数主体内的本地指针C++内存泄漏
- 从构造函数内存泄漏引发异常
- QThreads - 为什么要在构造函数中分配内存而不是使用普通的类成员?
- 构造函数对象赋值是否泄漏内存
- 如何使用构造函数初始化内存地址(指针变量)?
- 是否可以反序列化(从原始内存块)没有默认构造函数的对象?
- 在使用新操作员和C 中的结构的调用构造函数时,获得内存损坏(Malloc)
- 如果在构造函数中发生异常,如何释放动态内存
- 在类构造函数中初始化映射时,如何避免内存泄漏
- 链接列表C 的复制构造函数中的内存泄漏
- 复制赋值构造函数中的aligned_alloc内存块在释放时崩溃
- 构造函数中的动态内存分配
- 构造函数和内存泄漏中的异常
- 当构造函数引发异常时,如何在构造函数中分配内存
- 构造函数C++中的类实例内存地址
- C 内存模型是否提供了有关构造函数操作的保证