Member 14876295 Ответов: 1

Указатели в конструкторе


- Эй! Может ли кто-нибудь сказать мне, почему мой код не дает мне значение указателя ptr, которое равно 500 в этом коде.Позвольте мне показать вам мой код:
#include <iostream>
using namespace std;

class MyClass {

public:
    int* ptr = new int;
    int val;

    MyClass(int ptr=0,int val=0) :ptr(&ptr), val(val)
    {
        cout << "Default Constructor is called (Constructor Initializer List)" << endl << endl;
        ptr = 500;
        val = 80;
    }

    void show_constructor_initializer_value() {
        cout << "PTR = " << ptr << endl << "VAL = " << val << endl << endl;
    }

    ~MyClass() {
        cout << "Destructor called" << endl << endl;
        delete ptr;
    }
};


int main()
{
    MyClass m1;

    m1.show_constructor_initializer_value();
}


Что я уже пробовал:

Я испробовал все известные мне методы.

1 Ответов

Рейтинг:
11

OriginalGriff

Потому что 500 - это не адрес.
Делающий это:

int* ptr = new int;
...
ptr = 500;
Не устанавливает целочисленное значение, а устанавливает указатель на целочисленное значение - то есть выбрасывает адрес целого числа и заменяет его значением 500.

И это бесполезно для вас, потому что это не адрес. Поэтому, когда вы пытаетесь распечатать его позже, он пытается напечатать адрес и в основном вскидывает руки в ужасе.

Вероятно, вы хотели сделать вот что:
int* ptr = new int;
...
*ptr = 500;
...
cout << "PTR = " << *ptr << endl << " VAL = " << val << endl << endl;


Member 14876295

Чувак! Я знаю это, но на самом деле я хочу получить этот результат в таком синтаксисе. Если это возможно, то, пожалуйста, сделайте код для этой строки.

Member 14876295

Короче Говоря ! Я хочу спросить, как мы можем инициализировать указатель инициализируем в конструкторе.

Member 14876295

Короче Говоря ! Я хочу спросить, как мы можем инициализировать указатель инициализируем в конструкторе.

OriginalGriff

Не к постоянному значению, нет - вы понятия не имеете, где находится ваша память, поэтому вы не можете использовать константу в качестве адреса памяти.

Member 14876295

Спасибо! Я понял, к чему ты клонишь.

OriginalGriff

Всегда пожалуйста!