有什么用途:
static_castdynamic_castconst_castreinterpret_cast(type)valuetype(value)如何决定在哪些特定情况下使用哪个?
假设您正在堆上创建一个目标数组,如下所示:
myClass * objectPtr = new myClass[10];
Run Code Online (Sandbox Code Playgroud)
new 只调用默认构造函数,并且(根据我的读数)不允许调用任何其他构造函数.
是否有任何逻辑背后为什么new不能调用任何其他构造函数?做类似的事情似乎更好
myClass * objectPtr = new myClass[10](12);
Run Code Online (Sandbox Code Playgroud)
而不是
myClass * objectPtr = new myClass[10];
objectPtr[0] = myClass(12);
objectPtr[1] = myClass(12);
...
Run Code Online (Sandbox Code Playgroud) 在开始我的问题之前,我要说的是,我知道我可以使用标准库或 gsl 库(例如std::Vector)轻松解决我的问题。但我正在尝试学习 C++ 和动态内存分配,所以我想知道是否有一种方法可以在不使用 Vector 或类似的东西的情况下解决它。
我有一个Layer类,其中包含创建对象时确定的多个神经元(通过动态内存分配):
class Layer {
private:
unsigned int _size;
const Neuron* _neurons;
public:
Layer(unsigned int size);
~Layer();
const Neuron* getNeuron(unsigned int index) const;
};
Layer::Layer(unsigned int size) {
_size = size;
_neurons = new Neuron[size];
}
const Neuron* Layer::getNeuron(unsigned int index) const {
Expects(index < _size);
return &_neurons[index];
}
Layer::~Layer() {
delete[] _neurons;
}
Run Code Online (Sandbox Code Playgroud)
现在的挑战是在Network课堂上:我需要创建一个 n 层网络,每个层包含不同数量的神经元(作为长度为 n 的数组传递):
class Network {
private:
unsigned int _nb_layers;
const Layer* …Run Code Online (Sandbox Code Playgroud) 假设a class X具有构造函数X(int a, int b)
我创建了一个指向X的指针,X *ptr;为类动态分配内存.
现在创建一个X类对象数组
ptr = new X[sizeOfArray];
Run Code Online (Sandbox Code Playgroud)
到现在一切都很好.但我想要做的是创建上面的对象数组应该调用构造函数X(int a, int b).我尝试如下:
ptr = new X(1,2)[sizeOfArray];
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,它给了我编译时错误
错误:预期';' 在'['标记|之前
如何创建一个对象数组来调用构造函数?
SizeOfArray 用户在运行时输入.
编辑:
我想要达到的目标是不可能的,如天顶所回答的那样,或者太复杂了.那我std::vector该如何使用呢?
我写了一个类,像这样(仅用于演示):
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。
假设类必须被初始化,如何解决问题?我必须放弃构造函数吗?
我有一个hi带有非默认构造函数的类,它带有两个参数.我正在尝试构造一个his 数组:
class hi {
public:
hi(int a, int b){};
};
int main() {
hi *hello;
int number_of instance = 5;
hello = new hi[number_of_instance]; // (1)
}
Run Code Online (Sandbox Code Playgroud)
如何hi::hi(int,int)在标记的线上调用(1)?