Как инициализировать динамичский массив?

Подскажите плиз как инициализировать размер массива(не вектором), если каждое из действий задано отдельной функцией?

#include <iostream>

using std::cin;
using std::endl;
using std::cout;

class first{
private:
    int a;
    int b;
    int c;
    int DB[0][0][0];                // пробовал нулями, еденицами, двойками и переменными
public:                             //работает не корректно или выдает ошибку
    void set_size(){
        cout << "Enter first size: ";
        cin >> a;
        cout << "Enter second size: ";
        cin >> b;
        cout << "Enter third size: ";
        cin >> c;
        DB[0][0][0] = DB[a][b][c];     // это единственно что в голову пришло, 
    }                                  // компилятор ошибок не выдал
                                       // но все равно не корректно работает
    void set_data(){
        for (int i = 0;i < a;i++)
            for (int j = 0;j < b; j++)
                for (int h = 0;h < c; h++){
                    cout << "Enter " << i+1 << "." << j+1 << "." << h+1 << "." << " element: ";
                    cin >> DB[i][j][h];
                }
    }

    void get(){
        cout << endl;
        cout << "DB have: " << endl;
        for (int i = 0; i < a; i++)
            for (int j = 0; j < b; j++){
                for (int h = 0; h < c; h++)
                    cout << i+1 << "." << j+1 << "." << h+1 << ". equal: " << DB[i][j][h] << endl;
                cout << endl;
            }
    }
};

int main(){
    setlocale(0,"");

    first data;

    data.set_size();
    data.set_data();
    data.get();

    return 0;
}

А что такое RAll?

Resource Acquisition Is Initialization

Эта идиома позволяет строить более безопасный с точки зрения утечек ресурсов код.
Как правило, в результате оптимизаций получается еще и нулевой оверхед.
Бесплатная безопасность, прелесть же. :)

А как использовать?

Простейший пример:

struct Wrapper
{
    Wrapper(int* p) : p(p) {} //Захват ресурса в конструкторе
    ~Wrapper() { delete p; } //Освобождение ресурса в деструкторе
    int *p;
};



void foo()
{
    Wrapper x(new int(10));
    //...
    //Wrapper гарантирует освобождение ресурса, даже в случае исключения при правильном их использовании, конечно же.
}

Например, std::unique_ptr реализует данную идиому.

std::unique_ptr<int> x = std::make_unique<int>(10);
//...
//unique_ptr освободит ресурс
std::cout << *x << '\n';

А еще он может работать с пользовательским deleter'ом.

struct cfile_deleter 
{
    void operator()(FILE *stream) {
        fclose(stream);
        std::cout << "ok";
    }
};
std::unique_ptr<FILE, cfile_deleter> x (fopen(__FILE__, "r"));
//...
//Гарантируется, что будет закрыт файл.

Собственно, можно сказать, что всё, что захватывает ресурсы в конструкторах и освобождает в деструкторе, реализует идиому RAII.

Я чет не понял что такое for

Печаль.

Я чет не понял что такое for

Когда-нибудь поймёте. ;-)

То есть про рэлл немного и здесь вижу.

Не «ЛЛ», а «ИИ».
Resource Acquisition Is Initialization

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.