Объект создает другой экземпляр вместо изменения того, на который указывает

Функция parse_str() автоматически считывает все параметры запроса в массив.

Например, если URL-адрес http://www.example.com/page.php?x=100&y=200, код

$queries = array();
parse_str($_SERVER['QUERY_STRING'], $queries);

будет хранить «x» = 100 и «y» = 200 в $queries.

Посмотрите документацию parse_str


EDIT

Согласно документации PHP, parse_str() следует использовать только с второй параметр. Использование parse_str($_SERVER['QUERY_STRING']) на этом URL-адресе создаст переменные $x и $y, что сделает код уязвимым для таких атак, как http://www.example.com/page.php?authenticated=1.

1
задан Rainbow 16 January 2019 в 18:00
поделиться

1 ответ

Вот что std::make_shared делает : Создать новый объект, используя переданные аргументы для передачи в подходящий конструктор. В вашем случае конструктор копирования.

То есть оператор

std::shared_ptr<MemoryManager> wsk= std::make_shared<MemoryManager>(mem);

эквивалентен

std::shared_ptr<MemoryManager> wsk(new MemoryManager(mem));

Если вы хотите, чтобы ваш общий указатель ссылался на существующий объект, то вам нужно использовать

std::shared_ptr<MemoryManager> wsk(&mem);

Но это принесет с собой другие проблемы, так как, когда последний общий указатель будет уничтожен, он попытается освободить память, что невозможно для объекта, не созданного new. Для этого есть два решения: либо создать (или использовать существующий) null-deleter , который на самом деле ничего не delete; Или позволяя общему указателю обрабатывать полное владение (от создания до уничтожения) объекта.

И это действительно, как вы должны смотреть на умные указатели, не как своего рода самоуничтожающийся указатель, а с точки зрения владения ресурсом .

0
ответ дан Some programmer dude 16 January 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: