問題描述-阻止對象的拷貝
現(xiàn)實(shí)生活中的房產(chǎn)中介賣房子,一個(gè)服務(wù)于這個(gè)中介的軟件系統(tǒng)很自然的會(huì)有一個(gè)表示要被銷售的房屋的類:
1 class HomeForSale { ... };
每個(gè)房產(chǎn)中介會(huì)立刻指出來,要銷售房屋的每個(gè)屬性都是唯一的,沒有兩個(gè)完全一樣的房屋。在這種情況下,拷貝一個(gè)HomeForSale對象就沒有任何意義了。你在怎么能拷貝一些獨(dú)一無二的東西呢?因此你可能會(huì)嘗試,如果有拷貝HomeForSale對象的函數(shù),代碼將不能夠通過編譯。
1 HomeForSale h1; 2 3 HomeForSale h2; 4 5 HomeForSale h3(h1); // attempt to copy h1 — should 6 7 // not compile! 8 9 h1 = h2; // attempt to copy h2 — should10 11 // not compile!
阻止這樣的編譯不是簡簡單單能夠做到的。在通常情況下,如果你不想一個(gè)類支持特定類別的函數(shù),你只要不聲明這個(gè)函數(shù)就可以了。但是這個(gè)策略對拷貝構(gòu)造函數(shù)和拷貝賦值運(yùn)算符來說就不工作了,因?yàn)?