Boost 提升posix时间

Boost 提升posix时间,boost,time,posix,Boost,Time,Posix,我现在有一个很奇怪的问题 class Message { Field time; void SetTimeStamp() { time.dataTimeValue = &boost::posix_time::microsec_clock::universal_time(); } void SetOtherFields() { } }; class Field { boost::posix::ptime* dateTimeValue; }; in

我现在有一个很奇怪的问题

class Message
{
  Field time;
  void SetTimeStamp()
  {
    time.dataTimeValue = &boost::posix_time::microsec_clock::universal_time();
  }
  void SetOtherFields()
  {
  }
};

class Field
{
  boost::posix::ptime* dateTimeValue;
};

int main()
{
  Message myMessage;
  myMessage.SetTimeStamp();
  myMessage.SetOtherFields();
}

当我调用
myMessage.SetTimeStamp()
时,我可以正确设置时间戳,我可以看到
dateTimeValue
的地址,并且该值有意义。但是在那之后,我调用
myMessage.SetOtherFields()
dateTimeValue
指针仍然指向相同的内存,这是好的,但是内存中的值变为一个carzy数字。我不知道发生了什么。

一个像样的编译器应该警告代码的地址是临时的。函数按值返回
ptime
,结果是
Message::SetTimeStamp
将临时文件的地址存储到
字段::dateTimeValue
中。尝试访问内存的值将导致未定义的行为

为解决此问题,请考虑更改<代码>字段< /> >以聚合<代码> Boo::POSIX:pTime/Cux>成员变量,而不是指针。

类字段
{
公众:
boost::posix_time::ptime dateTimeValue;
};
类消息
{
公众:
野外时间;
void SetTimeStamp()
{
time.dataTimeValue=boost::posix_time::microsec_clock::universal_time();
}
};

@cynric4sure:很高兴它解决了这个问题。你可能想考虑一下答案。