[英]Memory allocation with reference variable in C++
我已經在G ++編譯器中編譯了以下代碼,它工作正常,沒有任何錯誤或警告。
#include <iostream>
int main()
{
int &r = *(new int(100));
std::cout << r << std::endl;
return 0;
}
參考變量如何與內存分配一起使用?
為參考變量分配內存是否有效?
從C ++標准(5.3.1一元運算符)開始
1一元*運算符執行間接操作:應用該表達式的表達式應為指向對象類型的指針或為函數類型的指針,並且結果為指向表達式所指向的對象或函數的左值。 如果表達式的類型為“ T的指針”,則結果的類型為“ T”。 [注意:通過指向不完整類型(cv void除外)的指針進行的間接調用是有效的。 這樣獲得的左值可以有限的方式使用(例如,初始化引用) ; 該左值不能轉換為prvalue,請參見4.1。 —尾注]
在此聲明中
int &r = *(new int(100));
聲明了對使用堆中創建的未命名對象的運算符*
獲得的左值的引用。
最近,您可以使用參考刪除對象
delete &r;
考慮一個有關多態的更有趣的例子。
#include <iostream>
int main()
{
struct A
{
virtual ~A()
{
std::wcout << "A::~A()" << std::endl;
}
};
struct B : A
{
~B()
{
std::wcout << "B::~B()" << std::endl;
}
};
A &ra = *(new B);
delete &ra;
}
程序輸出為
B::~B()
A::~A()
new
運算符返回一個指針,該指針指向為您分配的任何內容。 當取消引用指針時,將獲得對其所指向的值的引用。 就那么簡單。
自C以來就是這樣(盡管引用不是一個明確的東西)。 它允許這樣的代碼:
void modify_my_int(int* the_int) { *the_int = 4; }
int main(void)
{
int var;
modify_my_int(&var);
printf("%d\n", var); // prints "4"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.