簡體   English   中英

通過構造函數初始化類中的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM