[英]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.