<P>简短回答:<St> >不能完全模仿C++中的Python <强> >。在</p>
<P>不像Python变量,C++变量是真实对象,而不仅仅是引用(对象),复制对底层对象没有任何作用,因此总是浅的(Python使用类型擦除来允许其变量引用任何可能的对象)。在</p>
在C++中,也可以实现同样的设计。因为只要一个对象的任何引用仍然存在,它就必须保持活动状态,但一旦最后一个引用超出范围,就会被删除(并释放所有内存),所以这样的对象就被<em>共享</em>。处理共享对象的C++方法是通过<强> ^ {< CD1> }</Sturn>。请参见下面的内容,了解为什么它必须是一个类似指针的对象而不是一个类似于引用的对象(例如python变量)。在</p>
<P>这样,用C++方式使用C++,你的代码将是</p>
<pre><code>std::vector<std::shared_ptr<Car>> collection1, collection2;
collection1.push_back(std::make_shared<Car>("black", "Ford"));
collection1.push_back(std::make_shared<Car>("white", "BMW"));
collection1.push_back(std::make_shared<Car>("yellow", "Audi"));
collection2.push_back(collection1[0]);
collection2[0]->color = "blue";
std::cout<<collection1[0]->color; // "blue"
</code></pre>
<p><code>std::shared_ptr<T></code>的行为类似于指针,但这与引用非常相似(其语法与指针不同,但实现方式相同)。在</p>
<hr/>
<P>注意,在C++中,设计一个与Python变量相同的函数,即^ {< CD1>},但使用^ {CD5>}代替^ {< CD6>},并保证一个有效对象(无空/空引用/指针)是不可能的。原因是<code>.</code>运算符不能重载。例如</p>
^{pr2}$
<p>然后我们可以让代码</p>
<pre><code>shared_reference<car> Car;
Car.color = "blue";
</code></pre>
<p>工作。这就是C++的原理。这意味着对于间接寻址,应该使用指针。在</p>