Как отозвать указатель?

Допустим, у меня есть 2 указателя, указывающих на одну и ту же область памяти. Если я знаю, что это за адрес, как я могу узнать, какие указатели указывают на это местоположение?

int x=5;
int* p1=&x;
int* p2=&x;

Как я могу получить адрес p1 и p2? Можно ли даже сделать это в C / C ++? Если нет, то можно ли найти все указатели и посмотреть, какие из них имеют значение &Икс?

3

Решение

Нет, невозможно «отследить» указатель в C или C ++ (хорошее практическое правило: если у функции большие скрытые затраты производительности, то ее нет в C или C ++)

Что касается второго подхода (прохождения памяти в поисках указателей), это именно то, что некоторые инструменты, такие как Бём сборщик мусора делать. Однако этот процесс не только неэффективен и не переносим, ​​но также может привести к «ложным срабатываниям», поскольку вы не можете определить, является ли байтовый шаблон в памяти реальным указателем или чем-то еще, например, обычным целым числом или частью строки.


В любом случае, вы должны спросить себя, какова реальная проблема, которую вам нужно решить, вместо того, чтобы пытаться взломать сборщик мусора самостоятельно. В зависимости от того, что вы хотите сделать, есть много способов приблизиться к этому в C ++ (RAII, умные указатели и т. Д.)

6

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

Других решений пока нет …

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