Wildvine Engine
Referencia Doxygen del codigo propio de Wildvine Engine.
Cargando...
Buscando...
Nada coincide
TUniquePtr.h
Ir a la documentación de este archivo.
1
6/*
7 * MIT License
8 *
9 * Copyright (c) 2025 Roberto Charreton
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a copy
12 * of this software and associated documentation files (the "Software"), to deal
13 * in the Software without restriction, including without limitation the rights
14 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 * copies of the Software, and to permit persons to whom the Software is
16 * furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included in all
19 * copies or substantial portions of the Software.
20 *
21 * In addition, any project or software that uses this library or class must include
22 * the following acknowledgment in the credits:
23 *
24 * "This project uses software developed by Roberto Charreton and Attribute Overload."
25 *
26 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32 * SOFTWARE.
33*/
34#pragma once
35
36namespace EU {
44 template<typename T>
45 class TUniquePtr {
46 public:
52 TUniquePtr() : ptr(nullptr) {}
53
59 explicit TUniquePtr(T* rawPtr) : ptr(rawPtr) {}
60
68 TUniquePtr(TUniquePtr<T>&& other) noexcept : ptr(other.ptr) {
69 other.ptr = nullptr;
70 }
71
82 operator=(TUniquePtr<T>&& other) noexcept {
83 if (this != &other) {
84 // Liberar el objeto actual
85 delete ptr;
86
87 // Transferir los datos del otro puntero exclusivo
88 ptr = other.ptr;
89 other.ptr = nullptr;
90 }
91 return *this;
92 }
93
100 delete ptr;
101 }
102
103 // Prohibir la copia de TUniquePtr
104 TUniquePtr(const TUniquePtr<T>&) = delete;
106
112 T&
113 operator*() const {
114 return *ptr;
115 }
116
122 T*
123 operator->() const {
124 return ptr;
125 }
126
132 T*
133 get() const {
134 return ptr;
135 }
136
144 T*
146 T* oldPtr = ptr;
147 ptr = nullptr;
148 return oldPtr;
149 }
150
158 void
159 reset(T* rawPtr = nullptr) {
160 delete ptr;
161 ptr = rawPtr;
162 }
163
169 bool
170 isNull() const {
171 return ptr == nullptr;
172 }
173 private:
174 T* ptr;
175 };
176
185 template<typename T, typename... Args>
187 MakeUnique(Args... args) {
188 return TUniquePtr<T>(new T(args...));
189 }
190
191 /*
192 // Ejemplo de uso de TUniquePtr
193 class MyClass
194 {
195 public:
196 MyClass(int value) : value(value)
197 {
198 std::cout << "MyClass constructor: " << value << std::endl;
199 }
200
201 ~MyClass()
202 {
203 std::cout << "MyClass destructor: " << value << std::endl;
204 }
205
206
207 void display() const
208 {
209 std::cout << "Value: " << value << std::endl;
210 }
211
212 private:
213 int value; ///< Valor del objeto MyClass.
214 };
215
216 int main()
217 {
218 {
219 TUniquePtr<MyClass> up1 = MakeUnique<MyClass>(10);
220 up1->display();
221
222 TUniquePtr<MyClass> up2 = MakeUnique<MyClass>(20);
223 up2->display();
224
225 // Transferencia de propiedad
226 up2 = std::move(up1);
227 up2->display();
228
229 // Liberar propiedad
230 MyClass* rawPtr = up2.release();
231 rawPtr->display();
232 delete rawPtr; // Manualmente liberar la memoria ya que fue liberada del TUniquePtr
233 } // Aquí, up1 y up2 se destruyen y la memoria de MyClass se libera automáticamente si no fue liberada antes
234
235 return 0;
236 }
237 */
238}
239
Clase TUniquePtr para manejo exclusivo de memoria.
Definition TUniquePtr.h:45
TUniquePtr< T > & operator=(TUniquePtr< T > &&other) noexcept
Operador de asignación de movimiento.
Definition TUniquePtr.h:82
T * release()
Liberar la propiedad del puntero crudo.
Definition TUniquePtr.h:145
void reset(T *rawPtr=nullptr)
Reiniciar el puntero gestionado.
Definition TUniquePtr.h:159
TUniquePtr()
Constructor por defecto.
Definition TUniquePtr.h:52
T * operator->() const
Operador de acceso a miembros.
Definition TUniquePtr.h:123
T * ptr
Puntero al objeto gestionado.
Definition TUniquePtr.h:174
bool isNull() const
Verificar si el puntero es nulo.
Definition TUniquePtr.h:170
TUniquePtr(T *rawPtr)
Constructor que toma un puntero crudo.
Definition TUniquePtr.h:59
T & operator*() const
Operador de desreferenciación.
Definition TUniquePtr.h:113
TUniquePtr(const TUniquePtr< T > &)=delete
TUniquePtr(TUniquePtr< T > &&other) noexcept
Constructor de movimiento.
Definition TUniquePtr.h:68
~TUniquePtr()
Destructor.
Definition TUniquePtr.h:99
TUniquePtr< T > & operator=(const TUniquePtr< T > &)=delete
T * get() const
Obtener el puntero crudo.
Definition TUniquePtr.h:133
Definition Matrix2x2.h:35
TUniquePtr< T > MakeUnique(Args... args)
Función de utilidad para crear un TUniquePtr.
Definition TUniquePtr.h:187