2016-03-24 53 views
3

假設我有兩個模板類AB如何避免使用初始化程序列表構建臨時對象時的創建(和刪除)?

// Non-modifiable template class. 
template<class T> 
class A{ 
private: 
    T* ptr; 
    int size; 
public: 
    A(int const inputSize): 
     ptr{ new T[ inputSize ] }, size{ inputSize } 
    {} 
}; 

// Modifiable template class. 
template<class T> 
class B{ 
private: 
    A<T> a_obj; 
    int idx; 
public: 
    B(int const inputSize): 
     a_obj{ A<T>{ inputSize } }, idx{ 0 } //temporary object creation? 
    {} 
}; 

B具有A類型的需要的B施工時要構造一個成員變量。在構建B(如果發生的話)時,是否有辦法避免臨時構建類型爲A的對象?另外請假設我們不能修改A模板類。

我試圖得到的是一個類似的功能,我們看到emplace_back()與矢量中的push_back()相比:對象是在這個地方構建而不是兩次。

回答

3

你可以(也應該)直接傳遞A構造函數的參數沒有代碼意味着一個臨時的,即代替......

a_obj{ A<T>{ inputSize } }, idx{ 0 } //temporary object creation? 

...使用... ...

a_obj{ inputSize }, idx{ 0 } 

(前者是否實際創造了一個暫時的優先權取決於優化者)。

+0

謝謝。有時候我腦海中的某些明顯信息會被阻塞,當我意識到這一點時,我會問自己「我到底在想什麼?」。 – Farzad

+0

@Farzad:不用擔心!很多事情在被指出後顯得很明顯,但是你編碼的內容也有很多直觀的意義。乾杯。 –

相關問題