class Attr
{
public:
Attr();
Attr(const std::wstring& name)
{
...
}
};
class AttrDec : public Attr
{
public:
AttrDec(Attr* attr)
:Attr()
{
_attr = attr;
}
AttrDec(Attr*&& attr)
:Attr()
{
_attr = std::move(attr);
}
private:
Attr* _attr;
};
class XAttr : public AttrDec
{
public:
XAttr(const std::wstring& name)
:AttrDec(&Attr(name)) //HERE!!!
{}
}
在標記的位置我得到了一個警告:如何將右值變爲左值的指針?
非標準擴展使用:作爲左值右值類。
但我已經在類AttrDec
中定義了移動構造函數!
我怎樣才能解決這個警告?
它甚至意味着什麼移動指針?它沒有意義。它回落到簡單的複製..失去移動語義 –
你不能使用臨時地址。一旦構造函數完成,它將被破壞。 –
目前還不清楚你想要做什麼。'_attr'指向的數據的預期壽命是多少?在C++中,你必須關注數據的生命週期。如果你不知道,你的代碼將只會意外工作。你所看到的是編譯器說:「你把一個指針指向了一個幾乎爲零的東西,你可能搞砸了」。有很多方法可以讓它編譯*,但爲了讓它工作*你需要修復你的生命期問題。 – Yakk