我目前正在學習一門C++課程並試圖深入理解整個事情。 我想出了一些理論,這將是巨大的,如果有人能證實他們: 每個變量(本地,全局staic,會員和非會員)都保證有第一次使用 之前調用它的構造函數 像int這樣的基本類的ctors基本上是no-ops,所以我們明確地賦值了一個值,沒有默認的零值。 以下類在語義上是相同的(並且應該產生相同代碼) class A
{
int n;
};
是否有正當理由在Java類似 Long l = new Long(SOME_CONSTANT)
這將創建一個額外的對象,並通過FindBugs的標記,並且顯然是一個不好的做法。我的問題是,是否有充分理由這樣做? 我以前asked this about String constructors and got a good answer,但這個答案似乎並不適用於數字。
了評論What's wrong with this fix for double checked locking?說: 的問題是,該變量可以是 分配的構造函數運行 (或完成)之前,而不是對象 分配之前。 讓我們考慮代碼: A *a;
void Test()
{
a = new A;
}
,以便更正式的分析,讓我們分裂A =新的A到幾個操作: void *mem = mallo