Sean DeNigris wrote:
Hey-hey,
Is it proper to to use static_cast like this:
//Library.h - legacy library typedef ??? Type; //library-defined, we don’t know the actual type typedef Type* PType; //library-defined pointer type
//sets bufSize to # bytes necessary if buf not big enough LibraryFunction(PType buf, int* bufSize);
//MyCode.cpp int bytesNeeded = 0; LibraryFunction(0, &bytesNeeded); scoped_array<Type>(static_cast<PType>(new BYTE[bytesNeeded]));
The legacy library tells us storage requirements in BYTEs, but I want to deal with ‘Type’s, not BYTEs.
Is there a conceivable reason why this could not be safe, even if it happens to be with the current implementation?
Arrays on the heap must be deleted using the same pointer type and value yielded by new. Deletion using the result of any type conversion has undefined behaviour. Also, unless Type is declared as void the static_cast is ill-formed. You're going to need to use a separate scoped_array<BYTE> and pointer to Type. Ben.