運算代碼:
if (shippingOption == OVERNIGHT) {
OvernightPackage packageObject(// Parameters entered here //);
}
else if (shippingOption == TWODAY) {
TwoDayPackage packageObject(// Parameters entered here //);
}
// Presumably, process the package here.
你也許可以做到像這樣,只用自動分配,這絕對是最好的–最簡單,最安全,最有效的–當’小號適用:
void process(Package const& package)
{
// Process the package here.
}
void foo()
{
// ... whatever, then:
switch(shippingOption)
{
case overnight:
process(OvernightPackage(blah));
break;
case twoDay:
process(TwoDayPackage(blah));
break;
default:
assert(false); // Should never get here.
}
}
如果這是不可能的,那麼你可以使用包對象的動態分配。問題是,作爲初學者,你可能不知道評估上述內容是否實際上是不可能的(儘管可以很容易地看出它的確是可能的)。總之,動態分配使用智能指針,如C++ 11 std::shared_ptr
:
typedef std::shared_ptr<Package> PackagePtr;
PackagePtr foo(blah, blah, arguments)
{
// ... whatever, then:
switch(shippingOption)
{
case overnight:
return PackagePtr(new OvernightPackage(blah));
case twoDay:
return PackagePtr(new TwoDayPackage(blah));
default:
assert(false); // Should never get here.
}
}
當你獲得更多的經驗,你應該努力始終使用可用,可以做的工作最受限的智能指針,這可能是例如std::unique_ptr
。因爲將所有權轉讓給共享智能指針很容易,但很難將其轉移回所有權指針。然而,作爲初學者,你會發現std::shared_ptr
對大多數事物都很好,在這方面它就像一個馬鈴薯。 ;-)
太棒了,謝謝!我們剛剛開始繼承,所以我想我對細節有些模糊。這有幫助。 – Nate 2012-03-08 22:02:27
@Nate稍後請不要忘記刪除對象以避免內存泄漏。使用delete pakagheObject; – Topo 2012-03-08 22:05:32