Если я определю указатель, указывающий на умный указатель, устранит ли это преимущества умного указателя?

Интеллектуальный указатель C ++: если в классе я определяю указатель, указывающий на интеллектуальный указатель, устраняет ли это преимущества интеллектуального указателя? (Обратите внимание, я не говорил, что хочу применить этот вид использования)

Подобно:

class TestClass
{
public SmartPt* ptr1;
}

Здесь SmartPt — класс интеллектуальных указателей.

Потому что, если я не справлюсь с указателем хорошо, то с указанными умными указателями тоже не справятся.

Значит ли это, что не рекомендуется использовать указатель, указывающий на умный указатель?
Так что лучше напрямую использовать умный указатель, например:

public SmartPt object1;
[Обновление 1] Чтобы не отвлекать читателя, ранее я использовал MySmartPt, здесь я заменяю его на SmartPt.

-4

Решение

Нет, вы не должны пытаться использовать указатель на умный указатель, как в примере, которым вы делитесь.

умные указатели в C ++ построены на принципах RAII, которые пытаются максимально избавиться от оператора *. Они также используют перегрузку копирования / присваивания, которую не понимают необработанные указатели.

0

Другие решения

Так что, если вы хотите сделать что-то вроде этого:

void * vptr;
int i = 1346;

std::shared_ptr<int> sptr = std::make_shared<int>(i);

vptr = &sptr;

Затем совместно используемый указатель удалит себя, как только выйдет из области видимости, потому что это то, что он должен делать. Умные указатели не хранят ссылки на них, а только ссылки умных указателей на их данные.

Также, если вы позвоните delete vptr; произойдет одно из двух:

  1. Умный указатель будет очень зол, потому что он удалил вызвал.
  2. Если интеллектуальный указатель находится вне области видимости, то vptr указывает на недопустимый блок памяти.
0

По вопросам рекламы [email protected]