Вы не можете 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
используемый выше, называется «размещение нового». Тем не менее, в вашем случае нет необходимости в этом обмане.
Из документации Python:
Операторы присваивания в Python не копируют объекты, они создают привязки между целью и объектом. Для коллекций, которые являются изменяемыми или содержат изменяемые элементы, иногда требуется копия, чтобы можно было изменить одну копию, не изменяя другую.
blockquote>Для копирования объектов существует специальный модуль, который может выполнить работу. Python копия модуль
Когда вы делаете назначение, такое как в этом примере, вы создаете не новый объект, а ссылку на оригинал. Альтернативой является глубокая копия согласно https://docs.python.org/2/library/copy.html , однако, IMO, это довольно хакерский.
Как я избегаю проблем с этим, пытаясь сделать мои программы как можно более неизменными, то есть я не хочу переназначать переменные или изменять существующие переменные. Скорее, вы пытаетесь сохранить состояние объектов и создавать новые объекты на основе содержимого других.