當訂單構造函數/析構函數的這是析構函數/構造函數秩序正常,如果是這樣,爲什麼呢?返回一個對象
在下面的簡單函數
TemporaryObject SimpleFunction();
{
TemporaryObject obj = MakeObj();
// ...
return obj; // Stepping through at this point we hit TemporaryObject::dtor, MyObject::ctor
}
// At call site
MyObject obj = SimpleFunction();
在return語句我預計MyObject的構造函數被調用,然後TemporaryObject析構函數被調用。 (可能會臨時對象首先被複制,但RVO在這裏是典型的)。
在VS2010(調試版本)會發生什麼事是TemporaryObject析構函數首先被調用,然後MyObject的構造函數與析構對象。查看內存地址確認它是被傳入的被破壞對象,如果有任何疑問,析構函數的副作用是顯而易見的。 (爲了完整起見,MyObject ctor在TemporaryObject中設置了一個標誌,標誌着它已經被複制了,TemporaryObject dtor聲明瞭這個標誌被設置了,這就是我知道在這種情況下'copy'之前破壞發生的原因) 。
我真的懷疑這一點。向我們展示解決此問題的完整最小代碼。 –
我對此表示懷疑 - 這是一個例子。 – Zero
您需要發佈一個示例,其中包含在ctors和dector中修改的數據字段。 –