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:很高兴它解决了这个问题。你可能想考虑一下答案。