[英]Why does copy constructor call other class' default constructor?
我想知道為什么會發生這樣的錯誤。
no matching function for call to 'Foo::Foo()'
在代碼中的復制構造函數? 假設Foo只是具有普通字段的對象(沒有動態分配的內存等),並且它定義的唯一構造函數是采用一個參數的構造函數。
我什至不知道需要考慮構造函數。 如果代碼顯示類似
bar = thing.bar; //
並且bar是Foo類型,具有上述規格,難道它不只是生成一個淺表副本並用它完成嗎? 為什么需要調用默認構造函數?
如果未定義構造函數,則編譯器將生成默認構造函數,但是,如果您確實定義了構造函數(如副本構造函數),則編譯器將不會生成默認構造函數,因此您也需要定義該構造函數。
聽起來您已經定義了復制構造函數而未定義任何其他構造函數。
明確聲明構造函數后,編譯器將不再為您提供默認的構造函數。 因此,首先您將不再具有構造該類的對象的機制(因此將無法復制該對象)。
如您所說,如果您正在做“
bar = thing.bar;
它大概位於類的副本ctor的主體中-因此,首先使用其類的默認ctor初始化bar
字段,然后將該類的賦值運算符用於此語句。 如果bar
的類僅具有復制ctor,沒有默認ctor,則需要在類的復制ctor開頭{
之前添加bar(thing.bar)
子句, 然后刪除該賦值(無論如何通常是一個好主意,但在“沒有默認ctor”條件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.