#c
#c
Вопрос:
Итак, я думаю, я уже видел, что вы можете выделить память в C внутри структуры, поэтому вам не нужно делать это при создании переменной. в основном
typedef struct Data{
//Any Arbitrary data
char *name;
} Data;
int main(void){
Data* x = (Data*) malloc(sizeof(Data));
}
Есть ли какой-то способ, которым я могу сделать это изнутри структуры, например:
typedef struct Data{
(Data*) malloc(sizeof(Data));//<---Something to allocate memory?
//Any Arbitrary data
char *name;
} Data;
int main(void){
Data* x;
Data* y;
Data* z;
}
Комментарии:
1. Насколько мне известно, вы не можете этого сделать. Если вам нужно динамическое пространство, вы должны это сделать.
2. Возможно, вы думаете о конструкторе C .
Ответ №1:
Вы только что обнаружили необходимость в классах, которые переносят ресурсы и концепцию конструктора!
В стандарте C. Это невозможно сделать. Если вам нужны такие функции, лучше всего попробовать C или, возможно, использовать какое-нибудь расширение C. Например, у GCC есть атрибут cleanup.
В неидиоматическом C это будет выглядеть так:
struct Data {
char *name;
Data() {
name = (char*) malloc(sizeof(char)*100);
// it will allocate 100 bytes to the string everytime.
}
// other things to avoid leaking memory, copying the class, etc.
};
int main() {
Data x; // allocates
Data y; // also allocates
}
Этот пример показывает, как вы могли бы выделить для name
в C , но вы также можете выделить для Data
себя. В C есть утилиты, std::unique_ptr<Data>
которые сделают это за вас.
Комментарии:
1. Спасибо за знания! 🙂