diff --git a/expanded.cpp b/expanded.cpp new file mode 100644 index 0000000..468f7ea --- /dev/null +++ b/expanded.cpp @@ -0,0 +1,35 @@ +#include + +enum HANDLE_STATE { + HANDLE_CREAT, + HANDLE_DESTR +}; + +struct Vektor { + int count; + int *v; +}; struct Vektor_raiicpp; static inline void Vektor_lifetime_handler( enum HANDLE_STATE state, struct Vektor_raiicpp *self, void *data); struct Vektor_raiicpp : public Vektor { inline Vektor_raiicpp(void *data) { Vektor_lifetime_handler(HANDLE_CREAT, this, data); } inline ~Vektor_raiicpp() { Vektor_lifetime_handler(HANDLE_DESTR, this, nullptr); } } static inline void Vektor_lifetime_handler( enum HANDLE_STATE state, struct Vektor_raiicpp *self, void *data) { + if(state == HANDLE_CREAT) { + self->count = *(int*) data; + self->v = calloc(self->count, sizeof(int)); + } else if (state == HANDLE_DESTR){ + if(self->v) free(self->v); + } +} + +int main() { + int n; + printf("Number of elements to sum: "); + scanf(" %d", &n); + Vektor_raiicpp data(&n);; + + + for(int i = 0; i < data.count; ++i) { + scanf(" %d", &n); + data.v[i] = n; + } + n = 0; for(int i = 0; i < data.count; ++i) n += data.v[i]; + printf("Sum: %d\n", n); + + return 0; +}