Как ввести массив VALUE в качестве аргумента вместо его ССЫЛКИ?

Вы не можете malloc класс с нетривиальным конструктором в C ++. То, что вы получаете из malloc, является блоком памяти raw , которая не содержит правильно сконструированного объекта. Любые попытки использовать эту память как «реального» объекта не сработают.

Вместо объекта malloc -ing используйте new

example *ex = new example;

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

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;

Форма new используемый выше, называется «размещение нового». Тем не менее, в вашем случае нет необходимости в этом обмане.

0
задан Maxime Paul 18 March 2019 в 22:27
поделиться

2 ответа

Из документации Python:

Операторы присваивания в Python не копируют объекты, они создают привязки между целью и объектом. Для коллекций, которые являются изменяемыми или содержат изменяемые элементы, иногда требуется копия, чтобы можно было изменить одну копию, не изменяя другую.

Для копирования объектов существует специальный модуль, который может выполнить работу. Python копия модуль

0
ответ дан Lucas S. 18 March 2019 в 22:27
поделиться

Когда вы делаете назначение, такое как в этом примере, вы создаете не новый объект, а ссылку на оригинал. Альтернативой является глубокая копия согласно https://docs.python.org/2/library/copy.html , однако, IMO, это довольно хакерский.

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

0
ответ дан Will 18 March 2019 в 22:27
поделиться
Другие вопросы по тегам:

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