考慮下面的代碼:新表達式求值順序(指針分配)
Class* p = nullptr; //global var
由線程1中執行該代碼:
p = new Class;
上螺紋2,執行該代碼:
if (p != nullptr) ...; // does the standard gurantee that the pointer will be assigned only after object is constructed ?
我的問題是,當p
將被分配指向分配的內存時,該標準是否強制執行? 實施例1:
- 新
p
被分配給新的指向表達呼叫操作員新分配的內存Class
「sc`tor被調用,分配的內存被傳遞給它
示例2:
- 新表達式調用操作符new
Class
「sc`tor被調用,分配的內存傳遞給它p
被分配到指向新分配的內存
爲什麼不在建設者裏面睡一覺,看看自己,分享所獲得的知識? :) – Ajay
根據http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf,答案是「否」:在所述存儲器中構建對象之前,您可能會指向分配的存儲器。 – Quentin
沒有保證(實際上你的例子調用未定義的行爲)。這正是p必須是原子變量的原因之一。原子變量的默認排序約束也將保證構造函數在分配給p之前是完整的。 Herb Sutter的原子武器談話對解釋這種行爲做了很好的工作。 – John5342