2014-02-10 54 views
0
template <class T> 
Vector<T>::Vector() : _size_(0){ 
    this->_capacity_ = 10; 
    buffer = new T[this->_capacity_]; 
} 
template <class T> 
Vector<T>::Vector(unsigned int s) { 
     this->_size_ = s; 
     this->_capacity_ = _size_; 
     this->buffer = new T[this->_capacity_]; 
     init(0, this->_size_); 
} 

template <class T> 
Vector<T>::Vector(unsigned int s, const T &initial){ 
    this->_size_ = s; 
    this->_capacity_ = s; 
    this->buffer = new T[this->_capacity_]; 
    init(0, s, initial); 
} 

我的代碼使用了很多關鍵字this。如果沒有this關鍵字,那麼在類中調用成員函數而不是直接訪問它是否被認爲是好的做法?如果我總是調用成員函數來訪問成員變量,是否會產生開銷? C++實現是做什麼的?我應該使用「this」關鍵字從成員函數內部訪問類成員嗎?

+2

是你的問題是否使用'this'來訪問成員/方法,或者是否使用getters和setter而不是直接訪問成員?我不清楚。 – David

+0

你不應該使用'this'。它使代碼變得龐大並且使其不易讀。如果你想輸入你的'this',爲什麼要用C++?它看起來「奇怪」(即沒有人寫這樣的代碼,這很瘋狂)。 –

回答

5

由於編譯代碼,沒有開銷。當你這樣做:

this->_size = 5; 

_size=5 

編譯器將它們視爲相同,併產生相同的代碼。

如果您喜歡使用'this',那就使用它。

我個人不喜歡它。

+0

我不是指使用這個或沒有。我正在討論在一個類中調用一個存取函數。然而,它很高興知道編譯器會優化這種使用。但這不是一個指針嗎? – jax

+0

@ user246694是的,它是一個指針,但你仍然必須通過它來訪問_size,你是否明確地告訴編譯器('this - > _ size')或隱式地告訴編譯器。 –

+0

'我不是指使用這個或不是.'實際上,你可以:) :) – DarkWanderer

0

您在構造函數中初始化成員的方式是錯誤的。你應該使用初始化列表:

struct X { 
    X() : a(1), b(2), c(3) {} 
    int a, b, c; 
}; 

否則值將是默認初始化,然後再切。

訪問非虛擬成員函數的成本很難計算,因爲它取決於內聯。如果內聯,它是免費的。這對於簡單的get/setter來說很可能。

對於虛擬成員函數,它取決於編譯器在編譯時可能提升虛擬調用的能力,但應該假定會有開銷。

+0

編譯器不能找出初始化。 'a'的默認值是什麼? – Rob

+1

@Rob這取決於正在初始化的值的類型,以及'class'是否是POD。作爲一個經驗法則:始終使用初始化器列表初始化所有值。 – pmr

相關問題