#include #include template 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 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(); }