I have the following structs below.
static PinDelayPtr unspecifiedPipoDelayModel(new PinDelay());
#define DELAY_VALUE_NOT_GIVEN -7654321.0
typedef boost::shared_ptr<struct PinDelay> PinDelayPtr
struct DelayTime
{
double rise;
double fall;
DelayTime();
DelayTime(const double r, const double f);
};
struct PinDelay
{
DelayTime block;
DelayTime drive;
double load;
double maxload;
DelayTime usertime;
PinDelay();
PinDelay::PinDelay(const double pload, const double pmaxload,
const double brise, const double frise,
const double bfall, const double ffall,
const double urise, const double ufall);
};
struct DelayWireLoadTable
{
double slope;
unsigned int npinset;
std::vector<double> pins;
};
struct DelayCircuitImpl
{
DelayTime defarr;
DelayTime defreq;
DelayWireLoadTable wltable;
PinDelayPtr pipomodel;
};
My constructors looks like the following:
DelayTime::DelayTime()
: rise(DELAY_VALUE_NOT_GIVEN), fall(DELAY_VALUE_NOT_GIVEN) {}
PinDelay::PinDelay()
: load(DELAY_VALUE_NOT_GIVEN), maxload(DELAY_VALUE_NOT_GIVEN) {}
DelayCircuit::DelayCircuit()
: dc(new DelayCircuitImpl())
{
dc->wltable.slope = DELAY_VALUE_NOT_GIVEN;
dc->pipomodel = PinDelayPtr(new
PinDelay(*unspecifiedPipoDelayModel));
}
Since the struct contain POD (plain old data), I would think they
should be initialized to 0. However, I am not sure why the variable
'npinset' does not get a default value of 0. In my gdb output, I have
the following:
gdb) p *(*dc).dc
$4 = {
defarr = {
rise = -7654321,
fall = -7654321
},
defreq = {
rise = -7654321,
fall = -7654321
},
wltable = {
slope = -7654321,
npinset = 6311712,
pins = {
<std::_Vector_base<double,std::allocator<double> >> = {
_M_impl = {
<std::allocator<double>> = {
<__gnu_cxx::new_allocator<double>> = {<No data fields>},
<No data fields>},
members of std::_Vector_base<double,std::allocator<double>
::_Vector_impl:
_M_start = 0x0,
_M_finish = 0x0,
_M_end_of_storage = 0x0
}
}, <No data fields>}
},
pipomodel = {
px = 0x602960,
pn = {
pi_ = 0x6029b0
}
}
}
Everything looks good except, npinset has a garbage value. Is there
something I am not understanding about POD initialization? Something
in my code that is preventing npinset to be initialized to 0? Any
clarification is appreciation.
probably one more that I missed) but not on the stack or heap.