seminar 04 07_manager
This commit is contained in:
parent
feef44db4d
commit
edf2094701
1 changed files with 42 additions and 0 deletions
42
seminar04_templates/07_manager/main.cpp
Normal file
42
seminar04_templates/07_manager/main.cpp
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class Manager {
|
||||||
|
private:
|
||||||
|
T* mPtr;
|
||||||
|
public:
|
||||||
|
Manager() {
|
||||||
|
mPtr = nullptr;
|
||||||
|
}
|
||||||
|
void allocate() {
|
||||||
|
mPtr = (T*)malloc(sizeof(T));
|
||||||
|
}
|
||||||
|
void construct(const T& t) {
|
||||||
|
new(mPtr) T{t};
|
||||||
|
}
|
||||||
|
T& get() {
|
||||||
|
return *mPtr;
|
||||||
|
}
|
||||||
|
void destruct() {
|
||||||
|
mPtr->~T();
|
||||||
|
}
|
||||||
|
void deallocate() {
|
||||||
|
free(mPtr);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Manager<std::string> a;
|
||||||
|
a.allocate();
|
||||||
|
a.construct("Cats and dogs");
|
||||||
|
a.get() += " and elephants";
|
||||||
|
std::cout << a.get() << std::endl;
|
||||||
|
a.destruct();
|
||||||
|
|
||||||
|
a.construct("Sapere aude");
|
||||||
|
std::cout << a.get() << std::endl;
|
||||||
|
|
||||||
|
a.destruct();
|
||||||
|
a.deallocate();
|
||||||
|
}
|
Reference in a new issue