передать собственный адрес при создании объекта в c ++ - PullRequest
0 голосов
/ 13 июля 2020

Я следующий код

struct Me {
    Me(Me* a) { std::cout << "Processing " << a << std::endl; }
};

int main() {
    Me a(&a);
    std::cout << "Created obj in " << &a << std::endl;
    Me* ak = new Me(ak);
    std::cout << "Created obj in " << ak << std::endl;
    delete ak;
    return 0;
}

, и результат был

Processing 0x7ffdbd7f0607
Created obj in 0x7ffdbd7f0607
Processing 0x5653b66b5110
Created obj in 0x5653b6d35120

Как вы можете заметить, первые 2 строки вывода были в порядке, поскольку адрес, переданный конструктору, То же, что и создаваемый объект, но почему то же самое нельзя сделать с созданием динамического c. Может ли кто-нибудь дать описание возможного решения этой проблемы?

1 Ответ

3 голосов
/ 13 июля 2020

В Me a(&a); требуется адрес неинициализированной переменной a. Адрес действителен, но объект по этому адресу еще не существует. После ввода функции конструктора объект считается существующим.

In Me* ak = new Me(ak); ak не инициализируется единицей после возврата конструктора Me. Это приводит к передаче неопределенного значения ak в Me конструктор.

Может ли кто-нибудь предоставить описание с возможным решением для этого?

Решение для этого это this:

struct Me {
    Me() { std::cout << "Processing " << this << std::endl; }
};

См. этот указатель для получения полной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...