gpt4 book ai didi

c++ - 创建一个没有默认构造函数的对象数组

转载 作者:行者123 更新时间:2023-11-30 01:51:08 27 4
gpt4 key购买 nike

我在很多地方都读到过,在 C++ 中,您不能使用 new[] 运算符来创建没有默认构造函数的对象数组。我也明白我可以使用 vector 来轻松实现这一点。

但是,我尝试了下面的代码,它似乎使我能够在没有默认构造函数的情况下对对象数组使用 new[] 运算符:

struct mystuff{
int data1, data2;

mystuff(int a){
data1 = a;
data2 = 10;
}
mystuff(int a, int g){
data1 = a;
data2 = g;
}
};

int main(){
mystuff *b = static_cast<mystuff*> (::operator new (sizeof(mystuff[5]))); //allocate memory
for (int i = 0; i < 5; i++){
std::cout << &b[i] << std::endl; //addresses of allocated memory
}
new (b + 1)mystuff(5); //initialize one of the values in the array with non default constructor
new (b + 3)mystuff(10, 15); //initialize one of the values in the array with non default constructor
std::cout << "\n" << std::endl;
for (int i = 0; i < 5; i++){
std::cout << &b[i] << std::endl; //addresses of allocated memory after constructor
}

std::cout << "Values of constructed objects" << std::endl;
std::cout << b[1].data1 << "," << b[1].data2 << std::endl;
std::cout << b[3].data1 << "," << b[3].data2 << std::endl;

std::cin.get();

delete[] b;
return 0;
}

如果有人能告诉我这是否是合法的事情,或者显示的内容是否由于某种我没有意识到的原因而非常错误和危险(即我以某种方式在这个特定的环境中造成了内存泄漏),我将不胜感激示例)。

非常感谢

最佳答案

您可以为动态数组提供初始值设定项,也可以填充 vector :

mystuff * b = new mystuff[3] { mystuff(1), mystuff(2, 3), mystuff(4) };
// *b is leaked

std::vector<mystuff> const c { mystuff(1), mystuff(2, 3), mystuff(4) };

关于c++ - 创建一个没有默认构造函数的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497811/

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