Estoy queriendo un puntero inteligente contado no de referencia que puede combinar algunos de los aspectos útiles de auto_ptr
y shared_ptr
. Creo que el unique_ptr
de C++ 0x es en última instancia lo que necesitaría, pero necesito algo que compile en Visual Studio 2008 y Xcode (gcc 4.2).¿Hay un puntero inteligente general como auto_ptr y shared_ptr que no necesita C++ 0x?
La funcionalidad que necesito es:
- Utilizable en métodos de fábrica de manera que se transfiere la propiedad de la copia (como auto_ptr)
- Soporta
release()
(como auto_ptr) - Puede ser utilizado con la declaración hacia adelante (como shared_ptr)
Entonces, supongo que es realmente una mejor auto_ptr
. ¿Hay algo que haga esto en el impulso o en otro lugar (nota: no tengo tiempo para entender a Loki)? ¿O debería simplemente rodar el mío?
EDIT: Acabo de leer más sobre auto_ptr
- suena como si puede utilizarlo con declaraciones adelantadas si se asegura de que la cabecera de la clase se incluye en cada archivo .cpp que hace referencia a la cabecera con el Smart puntero (por ejemplo, ver GotW). ¿Alguien tiene algún consejo general o reglas generales sobre esto?
EDIT2 EDIT2: La razón shared_ptr no es aceptable porque necesito un método de liberación() ya que estoy ordenando algún código heredado mediante la introducción de métodos de fábrica, pero tiene que coexistir con algún código de propiedad de puntero manual. Usar shared_ptr en toda la base del código sería genial, pero una tarea enorme.
EDIT3: Al final, auto_ptr
fue adecuado para el trabajo una vez que descubrí las peculiaridades de la inclusión directa. También sería interesante intentar escribir un eliminador personalizado para shared_ptr
para permitir el borrado opcional del puntero.
Esto es exactamente lo que yo uso para auto_ptr. Hasta que comencé a usar boost (o en situaciones donde no puedo usar boost). –
Eche un vistazo a https://github.com/codenrun/auto_ptr_custom. Agrega un eliminador personalizado a una interfaz auto_ptr like. La razón – fizzbuzz