gpt4 book ai didi

c++ - 为什么我必须提供默认的构造函数?

转载 作者:太空狗 更新时间:2023-10-29 23:38:04 25 4
gpt4 key购买 nike

如果我想创建一个我的类型的对象数组,为什么我必须提供默认构造函数?谢谢解答

最佳答案

因为它们必须被初始化。

如果不是这样的话:

struct foo
{
foo(int) {}

void bar(void) {}
};

foo a[10];
foo f = a[0]; // not default-constructed == not initialized == undefined behavior

请注意,您不必:

int main(){
// initializes with the int constructor
foo a[] = {1, 2, 3};
}

// if the constructor had been explicit
int main(){
// requires copy-constructor
foo a[] = {foo(1), foo(2), foo(3)};
}

如果您确实需要一个对象数组并且您不能提供有意义的默认构造函数,请使用 std::vector

如果你真的需要一个对象数组,不能给出一个有意义的默认构造函数,并且想留在栈上,你需要延迟初始化对象。 I have written such a utility class . (您将使用第二个版本,第一个使用动态内存分配。)

例如:

typedef lazy_object_stack<foo> lazy_foo;

lazy_foo a[10]; // 10 lazy foo's

for (size_t i = 0; i < 10; ++i)
{
// create a foo, on the stack, passing `i` to the constructor
a[i].create(i);
}

for (size_t i = 0; i < 10; ++i)
a[i].get().bar(); // and use it

// automatically destructed, of course

关于c++ - 为什么我必须提供默认的构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2563254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com