[英]Initializing a pointer inside a class by means of the constructor
我想在其中創建一個帶有指針成員的類,並在構造類的實例時初始化該指針,如下所示:
#include "stdafx.h"
#include <iostream>
class MyClass {
public:
MyClass(int x): p(&x){}
int getValueOfp()
{
return *p;
}
private:
int* p;
};
int _tmain(int argc, _TCHAR* argv[])
{
int x=5;
MyClass obj1(x);
std::cout<<obj1.getValueOfp();
return 0;
}
問題是,當我調用getValueOf()
,我得到的輸出不是p
應該指向的變量的值(在這種情況下為5,因為它應該指向x
)。 我已經在網上搜索了這個問題的可能答案而沒有任何運氣,有人可以告訴我我在這里做錯了什么嗎? (正如您所見,我正在使用Visual Studio Express)。
MyClass(int x) : p(&x) {}
您的參數按值傳遞,因此將進行復制。 此副本是一個臨時值,將在構造函數體的末尾到期。 因此,您不是使用實際參數的地址初始化p
,而只是使用它的本地副本 。 稍后取消引用指針時,您將無法在其中找到實際值,因為此時整數將過期,即未定義行為。 您需要通過引用傳遞參數,以便不執行副本:
MyClass(int& x) : p(&x) {}
// ^^^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.