2016-04-20 32 views
9

Jak używać skalaru i tablicy w inteligentnym wskaźniku?Użycie zarówno skalarnej, jak i tablicowej w inteligentnym wskaźniku

Stary sposób korzystania z nowego i usunąć wskaźnik:

int *p; 

if (useScalar) { 
    p = new int; 
} else { 
    p = new int[10]; 
} 

if (useScalar) { 
    delete p; 
} else { 
    delete[] p; 
} 

w inteligentny wskaźnik, muszę użyć 2 wskaźników dla każdego skalarnego i tablicy palików:

std::unique_ptr<int> p1(new int); 
std::unique_ptr<int[]> p2(new int[10]); 

Jak mogę zmniejszyć do używać tylko 1 inteligentnego wskaźnika?

+0

Możesz napisać własny inteligentny wskaźnik, który przechowuje 'bool useScalar' w celu określenia, czy używać' delete' lub 'delete []'. – jotik

+6

Czy możesz przydzielić 'p = new int [1]' i udawać, że jest to wskaźnik do skalaru? – dasblinkenlight

+2

Możesz użyć 'int [1]' jako skalaru, może to również uprości inne obszary twojego programu ... – alain

Odpowiedz

5

Jeśli używasz niestandardowego narzędzia do usuwania, możesz użyć tego samego typu dla dowolnego wskaźnika.