Cyb*_*Luc 2 c++ arrays initialization
我写了一个类,像这样(仅用于演示):
class cls{
public:
cls(int a):value(a){}
private:
int value;
};
Run Code Online (Sandbox Code Playgroud)
我想动态创建一个数组,每个元素初始化为一个特定的值,如 2:
cls *arr = new cls[N](2);
Run Code Online (Sandbox Code Playgroud)
但是 g++ 报告了“错误:数组 new 中的括号初始化器”。
我在互联网上搜索,但只找到了类似int and等基本类型的类似问题double,答案是 NO WAY。
假设类必须被初始化,如何解决问题?我必须放弃构造函数吗?
你可以:
cls *arr = new cls[3] { 2, 2, 2 };
Run Code Online (Sandbox Code Playgroud)
如果您使用std::vector,您可以:
std::vector<cls> v(3, cls(2));
Run Code Online (Sandbox Code Playgroud)
或者
std::vector<cls> v(3, 2);
Run Code Online (Sandbox Code Playgroud)
使用向量。
如果您坚持使用动态分配的数组而不是std::vector,则必须采用困难的方法:为该数组分配一块内存,然后将所有元素一一初始化。除非你真的不能使用矢量,否则不要这样做!这仅用于教育目的。
cls* arr = static_cast<cls*>(::operator new[](N*sizeof(cls)));
for (size_t i = 0; i < N; i++) {
::new (arr+i) cls(2);
}
// ::delete[] arr;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11932 次 |
| 最近记录: |