簡體   English   中英

如何在構造函數中使用“ this”初始化其他類中的引用

[英]c++ - how to initialise reference in other class using 'this' from constructor

我有兩個類,Node和Bond。 當創建新的鍵時,我想在鍵的每一側的節點中添加對它的“ adjBonds”矢量的引用(從化學的角度考慮它,使鍵連接兩個原子)我找不到一種獲取對當前類(節點)的引用的方法; 我必須使用指針,我該怎么做?

另外,如果在類中聲明了std :: vectors,我是否必須清理它們? 我必須先清理這些向量中的引用,還是引用不需要內存管理?

class Node
{
public:
    std::vector<Bond &> m_adjBonds;
    ELEMENT m_element;
    Node(ELEMENT element)
        :m_element(element)
    {
    }

};

class Bond
{
public:
    int m_bondNumber;
    Node &m_end1;
    Node &m_end2;

    Bond(int bondNumber, Node &end1, Node& end2)
        :m_end1(end1), m_end2(end2), m_bondNumber(bondNumber)
    {
        m_end1.m_adjBonds.push_back(this);
    }
};

編譯器在“ this”上返回錯誤,表示“對非const的引用的初始值必須為l值”,但我不確定這意味着什么。

簡短的答案是您不能擁有參考vector 只需將您的成員更改為:

std::vector<Bond*> m_adjBonds;

這樣做的原因是,一旦分配了參考,就無法重新分配它。 在重新分配的情況下,矢量需要能夠重新分配(復制/移動)其內部元素,並且引用既不可復制也不可移動。

使用C ++ 11,您可以通過std::reference_wrapper使這種關系更加明確:

std::vector<std::reference_wrapper<Bond>> m_adjBonds;

在這種情況下,您必須取消引用this才能進行push_back

m_end1.m_adjBonds.push_back(*this);

對於內存清理,由於您使用vector來管理綁定,因此該類本身將正確處理自己的內存分配和釋放。 您無需在示例中進行任何其他分配,因此無需進行其他清理。

暫無
暫無

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

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