2012-06-27 41 views
1

我想在類中有一個引用數據成員,但我不想在構造函數中初始化它。如何在C++類中使用引用變量?

我該怎麼做?

+0

請注意,這往往是一個糟糕的主意。這意味着(除其他外)該類的對象不能被分配或複製。 –

+0

@JerryCoffin:沒有任務是有意義的 - 你不能改變參考 - 但應該可以複製。 – MSalters

回答

10

這是不可能的,你必須初始化ctor初始化列表中的引用數據成員。如果您確實需要這樣做,請使用指向數據成員的指針而不是引用。初始化ctor中的指針NULL,然後在需要時正確初始化它。

+0

但boost :: mutli_index不允許指針。 – Jichao

+0

如果數據對班級至關重要(太多以至於你想根據它進行索引),那麼班級可能應該有自己的數據副本,作爲成員。 –

2

您必須在構造函數中初始化它(只有通過初始化程序列表),因爲這是引用變量(引用必須初始化)的屬性。

您可以將它初始化爲某個靜態/全局變量,方法是通過默認參數保持它的初始化狀態。

YourClass::YourClass(int& ref = _SomeGlobalVar) : m_RefInClass(ref){} 

但是你不能重新初始化它。

0

如前所述,如果某處需要引用,通常這是一個糟糕的主意 - 通常有一個可靠的原因。

如果對於您正在做的事情有特定的推理,您可能需要have a look at Null Object Patterns

您可以創建一個空對象,引發某種'未實現'的異常,或者什麼也不做。您仍然需要在初始化程序列表中初始化您的成員變量,但現在至少您可以靈活地在將來進行更改。