簡體   English   中英

以臨時對象作為參數的C ++對象構造函數

[英]C++ Object Constructor with Temporary Object as Argument

我寫了一些代碼,突然想到我正在做的事情可能是一個非常糟糕的主意。 這是一個抽象的例子。 關鍵點是通過引用傳遞。

// vector.hpp
class vector {
    vector(double x, double y, double z);
}

// particle.hpp
class particle {
    particle(const vector& _init_position);
    vector m_position;
}

所以我編寫了一些代碼來表示class vector ,它包含3D矢量內容,並且還編寫了一個粒子類,其位置矢量可以用構造函數和矢量實例初始化。

在我的main()函數中,我使用臨時對象來初始化粒子對象,如下所示:

int main() {

    particle my_particle(vector(0.0, 1.0, 2.0)); // Temp vector instance - problem?
}

在這里你可以看到創建了一個臨時矢量實例,我假設它被放置在某個地方的堆棧上,然后調用粒子的構造函數。

這樣可以,還是非常糟糕的代碼示例? 我懷疑后者,因為我通過引用傳遞,因此臨時向量的實例可能無效?

希望有人可以澄清一下嗎?

您可以將臨時對象作為值或const引用參數傳遞給函數。 這是一件好事,因為你可以在傳遞const引用時保存副本。

您沒有顯示向量構造函數的實現,但該成員是一個值,因此我假設構造函數將其參數復制到該成員。 如果是這種情況,則傳遞const ref正是您想要做的以避免不必要的副本。

你不想做的是堅持對該論證的引用(或地址)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM