我有一個簡單的句柄類,用於控制繼承類的對象。下面是簡單的實現:句柄類和賦值運算符
#include <iostream>
class ParametersInner
{
public:
ParametersInner() {}
virtual ~ParametersInner() {}
virtual ParametersInner *clone() const = 0;
};
class ParametersConstant : public ParametersInner
{
public:
ParametersConstant(){};
virtual ParametersInner *clone() const { return new ParametersConstant(*this); }
};
class Parameters
{
public:
Parameters(const ParametersInner &innerObject)
{
std::cout << "CC (and implicit conversion)\n";
InnerObjectPtr = innerObject.clone();
}
Parameters(const Parameters &original)
{
std::cout << "CC\n";
InnerObjectPtr = original.InnerObjectPtr->clone();
}
Parameters &operator=(const Parameters &original)
{
std::cout << "AO\n";
if (this != &original)
{
delete InnerObjectPtr;
InnerObjectPtr = original.InnerObjectPtr->clone();
}
return *this;
}
virtual ~Parameters() { delete InnerObjectPtr; }
private:
ParametersInner *InnerObjectPtr;
};
int main()
{
ParametersConstant VolParam;
///this is identical to (Parameters)VolParam so it calls the copy constructor. But why does it not call the assignment operator = afterwards?
Parameters Vol = VolParam;
///calls copy constructor - OK
Parameters Vol_0(Vol);
///calls assignment operator - OK
Vol_0 = Vol;
return 0;
}
的代碼是相當簡單的,但是有一個方面,我想不通,這是關係到行Parameters Vol = VolParam;
。據我所知,基本上這條線翻譯成的是Parameters Vol = (Parameters)VolParam;
,即有一種類型轉換。
但是,轉換後爲什麼不是賦值操作符調用? Vol
如何創建?
不,這不是類型轉換,而是隱式構造。 – user0042
您能否詳細說明一下? – BillyJean
我現在這樣做了,看到我的答案。 – user0042