C ++ const指针奇怪的行为

时间:2016-03-08 08:17:02

标签: c++ pointers const-pointer

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 个答案:

答案 0 :(得分:0)

由于您尚未共享函数SomeLookUpFunction的代码,我必须猜测您返回类型为Something的本地对象的指针。这是个坏主意,请参阅http://i.stack.imgur.com/26sP6.png

要开始修复代码,首先应该返回简单对象而不是指针,如下所示:

 // 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