Существует базовое правило при использовании динамических массивов в c ++, особенно при использовании его внутри структур или классов, и это для удаления того, что вам больше не нужно.
Если вы хотите сделать вашу структуру динамической, это легкопросто замените []
на *
, и массив станет динамическим, но он еще не закончен, много работы.
Вы должны создать массив, уничтожить его и уничтожить егоЭто возможно и полезно с помощью деструкторов, например:
struct keyframe_file
{
const int num_views;
const int num_keyframes;
keyframe* keyframes;
~keyframe_file() // this is the destructor
{
delete[] keyframes;
}
};
Но даже этот код вообще не будет работать, так как вы присваиваете значения константам в переменной my_file
после ее создания, этоНедопустимо в C ++, тогда вы должны вместо этого использовать классы.
Использование классов с динамическими массивами очень просто и интересно и делает ваш код очень хорошим, вам не нужно слишком много знать, чтобы это сделать, просто узнайте, чтоявляется конструктором , инициализатором , деструктором , private и public и далее со следующимикод:
#include <iostream>
using namespace std;
struct keyframe
{
bool a;
int b,c;
};
class keyframe_file
{
public:
keyframe_file(int NV, int NKF):num_keyframes(NKF),num_views(NV)
{
keyframes = new keyframe[num_keyframes];
}
~keyframe_file()
{
delete[] keyframes;
}
private:
const int num_views;
const int num_keyframes;
keyframe* keyframes;
};
int main()
{
keyframe_file my_file(1,6);
return 0;
}
Этот код работает очень хорошо, он позволяет вам присвоить значение константам num_views
и num_keyframes
один раз при создании объекта (переменной) my_file
.
Помните, что вы программист на C ++, гордитесь этим и используете классы вместо структур и динамических массивов вместо статических.
Надеюсь, это полезно.