下面的代碼片段給出了警告:「臨時對象」警告 - 是我還是編譯器?
[C++ Warning] foo.cpp(70): W8030 Temporary used for parameter '_Val' in call to 'std::vector<Base *,std::allocator<Base *> >::push_back(Base * const &)'
..在指定的行。
class Base
{
};
class Derived: public Base
{
public:
Derived() // << warning disappears if constructor is removed!
{
};
};
std::vector<Base*> list1;
list1.push_back(new Base);
list1.push_back(new Derived); // << Warning on this line!
編譯器是CodeGear的C++ Builder的2007年
奇怪的是,如果Derived被刪除的構造,警告消失...... 是我還是編譯器?
編輯:我發現刪除警告的唯一方法就是類似於這樣:
Derived * d;
list1.push_back(d = new Derived); // << No warning now...
此代碼沒有警告與gcc。 – kriss 2010-05-25 14:20:15
這可能不是所有代碼。 Base和Derived是否有構造函數(非編譯器生成的)? – 2010-05-25 14:22:37
@MadKeithV - 給予或採取#include,這是所有的代碼。我從一個更復雜的案例開始,將其切割成顯示上述問題的裸露骨骼。 –
Roddy
2010-05-25 14:31:10