[英]Why does the standard disallow a pseudo-destructor call with a name of scalar type?
標准規則: [expr.prim.id.unqual]/nt:unqualified-id : 不合格的ID:... ~ 類型名稱 ~ decltype 說明符... [dcl.type.simple]/nt:type-name : 類型名稱: 班級名稱枚舉名稱類型定義名稱標量類型的名稱不是 ...
[英]Why does the standard disallow a pseudo-destructor call with a name of scalar type?
標准規則: [expr.prim.id.unqual]/nt:unqualified-id : 不合格的ID:... ~ 類型名稱 ~ decltype 說明符... [dcl.type.simple]/nt:type-name : 類型名稱: 班級名稱枚舉名稱類型定義名稱標量類型的名稱不是 ...
[英]Why does the standard disallow an explicit destructor call with ~ preceded by the template keyword and followed by a qualified name?
標准規則: [temp.names]/6 以關鍵字 template 為前綴的名稱應后跟模板參數列表或引用 class 模板或別名模板。 后一種情況已棄用([depr.template.template])。 關鍵字模板不應出現在 ~ 標記之前(如命名析構函數)。 這禁止使用template關鍵 ...
[英]Is reduction of `constexpr` object lifetime legal in C++?
對於普通對象(即使是const對象),允許通過顯式調用析構函數來結束它們的生命周期。 稍后,例如,程序可以使用 placement new在相同的 memory 位置開始另一個 object 生命周期。 但是調用constexpr object 的析構函數合法嗎? 它能產生一些有用的或至少是格式良 ...
[英]Class and member destructors called twice
Output: 有人可以向我解釋這里發生了什么嗎? 我預計 output 是 (一次當 ~B() 被調用,一次 ~A() 被調用)。 ...
[英]Constructor and Destructor for static member variable (a pointer)
我正在研究一個 class ex1 ,它需要一個 static 成員變量y 。 static 成員變量是指向 class ex2 的 object 的指針,該ex2具有自己的構造函數和析構函數。 現在我知道如何通過在 class 之外定義變量y來初始化它。 但是如何調用變量y的析構函數呢? 我需要 ...
[英]is it required to call a non-trivial destructor when it is a noop?
當你知道在這個特定情況下析構函數是一個noop時,標准是否需要調用非平凡的析構函數? 如果沒有調用析構函數,那么代碼可能會被編譯器破壞? 用例是一個包含動態分配指針的類。 默認情況下,此指針由構造函數中的new獲取。 這個類也可以從分配器獲得動態分配的指針。 該類跟蹤它如何獲取 ...
[英]Is calling destructor from a catch block in constructor safe?
在我的構造函數中,如果其中的任何代碼拋出,我必須銷毀任何剩余的資源。 我想避免編寫重復的代碼,所以我只是在catch塊中調用析構函數,而不是釋放任何已創建的資源。 這樣安全嗎? 我知道如果構造函數拋出,析構函數不會被調用,所以我嘗試在msvc中編譯一些代碼,似乎沒什么不對,但我不確定這 ...
[英]Explicit call to destructor
我偶然發現了以下代碼片段: 該文本表示此代碼段應該導致運行時錯誤。 現在,我對此並不十分肯定,所以我嘗試編譯並運行它。 有效。 奇怪的是,盡管所涉及的數據非常簡單,但在打印“文本”之后程序結結巴巴,並且僅在一秒鍾之后完成。 我添加了一個要打印到析構函數的字符串,因為我不確定顯 ...
[英]Can I call a virtual destructor using a function pointer?
我有類數據,可以保存指向對象的指針。 我希望以后能夠手動調用它的析構函數,為此我需要將其地址存儲在變量中,但似乎禁止使用構造函數/析構函數的地址。 有沒有辦法解決 ? ...
[英]Explicit call of a destructor for a c++ object
我以上述方式編寫了代碼。 我希望析構函數〜box()只會被調用一次。 但是實際上,指示符“執行了析構函數”被打印了兩次。 有什么提示嗎? ...
[英]Pseudo-destructor call with template keyword
以下代碼不使用clang 5.0.0進行編譯(編譯標志為-std=c++14 -Wall -Wextra -Werror -pedantic-errors -O0 ): 它是一種強制使用template關鍵字編譯偽析構函數調用的方法嗎? ...
[英]Why can't constructors be explicitly called while destructors can?
在下面的C ++代碼中,我可以顯式調用析構函數而不是構造函數。 這是為什么? 不明確的ctor調用與dtor案件更具表現力和統一性嗎? ...
[英]Is it allowed to call destructor explicitly followed by placement new on a variable with fixed lifetime?
我知道顯式調用析構函數會因為雙析構函數調用而導致未定義的行為,如下所示: 但是,如果我們將新位置稱為“復活”對象,該怎么辦? 更正式的: 如果我在某個對象上顯式調用析構函數而不是首先使用placement new構造,那么C ++中會發生什么(我對C ++ 03和C + ...
[英]Can I explicitly invoke property destructors so that I can see which one causes problems?
我猜這是一個非常令人討厭的問題-好像我班上的財產破壞者之一造成了僵局。 屬性析構函數在類析構函數之后自動調用。 我想手動調用它們,並在每一個成功之后進行日志輸入。 該問題僅發生在無法使用調試器的設備上,因此我改用日志。 但是上面的代碼實際上會導致異常,因為~io_service ...
[英]Destructing a Single shared_ptr One-by-One
我試圖一個一個地破壞 shared_ptr,但是當我破壞最后一個指針時, use_count() 變得瘋狂。 觀察我的代碼: 將在調試器中產生以下輸出: 我希望在最終銷毀時它將 use_count() 設置為 0 並釋放整數的內存。 似乎這一切都沒有發生。 當 use_count() == ...
[英]C++ unintended destructor calls
我有關於C ++數據結構的作業,但是遇到了一個奇怪的問題。 抱歉,標題有點沒用。 首先,對於家庭作業,我們提供了一個PaperRepository類的頭文件來實現。 此類通過圓形雙向鏈表保存論文信息。 每篇論文都有標題,發表論文的期刊,出版年份以及由另一個鏈接列表類(排序的鏈接列表)保存 ...
[英]Is it legal to call member functions after an object has been explicitly destroyed but before its memory was deallocated?
我有這個代碼: 請注意,在對象被銷毀之后但在其內存被釋放之前,正在調用doNothing() 。 看起來“對象生命周期”已經結束,但指針仍然指向正確分配的內存。 成員函數不訪問任何成員變量。 在這種情況下,成員函數調用是否合法? ...
[英]Access member variables after destructor call
我有這樣的代碼: 在顯式調用析構函數后,我的Test類的所有成員變量都可能無法訪問,因此調用foo.blub()無效。 如果我將引用存儲在局部變量中以避免訪問成員變量,那么對foo.blub()的調用是否可以保證有效? 在析構函數調用之后,編譯器是否無法優化局部變量並訪問成員變量,使 ...
[英]Pseudo-destructor call does not destroy an object
考慮以下代碼: 我預計a將被銷毀。 但事實並非如此,為什么呢? 怎么做那個偽析構函數調用會被銷毀的對象呢? ...
[英]Is it safe to use placement new on 'this' pointer
目前的實施 我有一個包含unique_ptr字段的類,它們依賴於另一個: 用例 這里的用例是我想將新值重新分配給指針,同時將ResourceManager保持為堆棧分配的變量,或者作為非指針類成員。 使用我當前的設置,我想像使用這樣的東西: 這甚至是一個問題的原 ...