Ваши c
и c1
совместно используют один и тот же B
объект, а именно b
.
Поскольку обсуждаемый нами state
относится к b
, есть только один из них - b.state
.
Если вы хотите, чтобы state
отличался, вы не можете использовать один и тот же объект B
с обоими C
объектами.
Вероятно, это сводится к неправильному пониманию эталонной семантики присваивания и передачи параметров. Ни присваивание, ни передача параметров не делают копию объекта.
Но есть ли способ получить c.state как "first" и c1.state как
«второй» с передачей одного и того же объекта в c и c1?
Это не могло сработать. Предположим, что один объект B
может каким-либо образом иметь любое количество значений state
. Всякий раз, когда вы пишете b.state
, как система узнает, какую именно вы имели в виду?
Ну, это не совсем так, как я написал. Если бы конструктор C
использовал только свой объект B
для создания полностью новой копии, так что он сохранил копию, а не оригинал, то вы бы достигли эффекта; в мире будет три B
объекта, оригинал, копия, сделанная c
, и копия, сделанная c1
. Но это не имеет здесь никакого преимущества по сравнению с передачей отдельных B
экземпляров для начала.