C ++ const указывает на странное поведение

Class C {
struct Something {
string s;
// Junk.
}
// map from some string to something.
map<string, Something> map;

// Some more code:
const Something *Lookup(string k) const {
const something *l = SomeLookUpFunction();
cout << l;
cout << &l->s;
cout << l->s;
return l;
}
}

// Some Test file
const C::Something *cs = C::Lookup("some_key");
cout << cs;
cout << &cs->s;
cout << cs->s;

Странная вещь заключается в следующем:
* Для функции поиска:
0x9999999
0x1277777
some_string

* Для тестового кода
0x9999999
0x1277777
000000000000000000000000000000000000000000 ….

В тестовом файле он дает очень длинную строку нулей, но адреса совпадают. Есть идеи, что может пойти не так?

-1

Решение

Поскольку вы не поделились кодом для функции SomeLookUpFunctionЯ должен догадаться, что ты возврат указателя на локальный объект типа Something, Это плохая идея, видите аналогичный QA.

Чтобы начать исправлять свой код, вы должны начать с возврата простого объекта вместо указателя, как показано ниже:

 // Some more code:
const Something lookup(string k) const {
const something l = SomeLookUpFunction(); // return simple object
cout << &l;
cout << &l.s;
cout << l.s;
return l; // same object
}

Конечно, вы должны улучшить код, предоставив конструкторы копирования для типа something и даже улучшая свой map,

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]