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