Возможно ли это? (C ++) - PullRequest
       18

Возможно ли это? (C ++)

1 голос
/ 04 октября 2009

Записать указатель на строку, удалить указатель и загрузить указатель из строки?

Ответы [ 2 ]

14 голосов
/ 04 октября 2009

Эти операции можно выполнять, но они не будут иметь эффекта, который вы (вероятно) после.

Запись указателя на строку сохранит только значение указателя, то есть адрес указанного объекта. Это строка более или менее постоянной длины, например 0x7f2b93c91780 (в 64-битной системе). Естественно, это не фиксирует состояние реального объекта.

Когда вы используете delete для указателя, указанная память будет возвращена системе; это больше не ваше использовать. Сам указатель не удаляется, операция влияет только на указанную память. Кроме того, значение указателя фактически не изменяется, когда вы используете delete для него. Таким образом, нет никакой разницы, если вы теперь перезагружаете его, считывая его из строки, хранящейся где-то еще: он по-прежнему указывает на память, которой вы больше не владеете, и, следовательно, не можете читать или писать без вызова неопределенного поведения .

Как и предложил PiotrLegnica, вам нужно сериализовать весь объект в строку, а затем заново создать объект из сериализованной версии (десериализовать его).

7 голосов
/ 04 октября 2009

Это возможно, но это не будет делать то, что вы думаете, что будет делать. Сохранение всего объекта в виде строки называется сериализацией - см. Boost.Serialization (или Буферы протокола , как предлагается в комментариях), если вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...