我想將第二個對象的臨時對象傳遞給另一個對象構造函數,以獲取生成的對象的所有權。我的代碼是這樣將r值傳遞給構造函數時有任何限制嗎?
class A {
};
class B {
A a;
public:
B(A && _a) : a(_a) {}
void test(){ }
};
int main(int argc, const char *argv[])
{
B b(A());
b.test();
return 0;
}
,但我發現這個錯誤,我無法理解
$ g++ -std=c++0x main.cpp
main.cpp: In function 'int main(int, const char**)':
main.cpp:15:7: error: request for member 'test' in 'b', which is of non-class type 'B(A (*)())'
也許這只是一個愚蠢的語法錯誤,但如果它不是,你將如何定義這樣的構造函數來獲得一些創建的資源的所有權?
感謝
這是一個語法錯誤。你聲明瞭一個函數'b',取一個返回'A'的零adic函數,並返回'B'。 –
[構造函數調用機制]的可能重複(http://stackoverflow.com/questions/4283576/constructor-invocation-mechanism) – Mat
參見http://stackoverflow.com/questions/6690256/why-can-this-code -elide-a-copy,http://stackoverflow.com/questions/180172/why-is-it-an-error-to-use-an-empty-set-of-brackets-to-call-a-constructor -with-no – Mat