У меня есть этот унаследованный код: 2 вопросы, первый, почему они делают это указатель на указатель на ссылку вар:C++, что есть смысл получать указатель на указатель на адрес
cData& acData = *(*CacheVectorIter); //WHAT IS IT ?
и делает это удалить реальный объект или просто указатель на объект?
delete &acData;
это код (модифицированный)
for (CacheVector::iterator CacheVectorIter = m_Cache.begin();
CacheVectorIter != m_Cache.end();
++CacheVectorIter) {
if (*CacheVectorIter != NULL) {
cData& acData = *(*CacheVectorIter); //WHAT IS IT ?
for (ObjectTypeMap::iterator ObjectTypeMapIter = acData.Map.begin();
ObjectTypeMapIter != acData.Map.end();
++ObjectTypeMapIter) {
delete (*ObjectTypeMapIter).second;
}
delete &acData; // DOES IT DELETE THE OBJECT OR THE POINTER?
}
}
Кажется, что 'm_Cache' объявлен как контейнер, содержащий указатели, тогда первый оператор разыменования для итератора, второй - для разыменования фактического указателя, а' acData' является ссылкой на эти данные. Затем использование адреса-оператора на 'acData' даст вам указатель на объект, который он ссылается, который вы можете удалить. –
Они просто создают ссылку на данные, на которые указывает итератор, поэтому они могут использовать точечный синтаксис и не использовать везде, где есть ведение указателя (* CacheVectorIter) -> Map.begin(); ' – Joe
Почему ?, вы ссылаетесь область в куче, вы можете удалить ее. Синтаксис крайне уродлив, но действителен. – Raistmaj