为什么我能在没有默认构造函数的情况下默认构造对象?

时间:2014-09-25 13:30:35

标签: c++ constructor

这是C和C ++之间边界层上的一行函数。该函数获得了一堆void* 并将它们转换为应该存在的类型。发现错误:

MDLPeriph periph_dline = *static_cast<MDLPeriph*>(dline_periph);

确实,periph_dline应该是一个参考。让我感到困惑的是,这段代码在没有警告的情况下编译。此外,gdb在检查此代码时会报告Internal GDB error.并崩溃。

据我所知,上面的代码默认构造了一个MDLPeriph对象。然后使用新对象的复制构造函数从右侧分配值。

但是MDLPeriph没有默认构造函数!这怎么可能?

平台和工具:

  

Windown 7
  yagarto的这个版本使用以下版本:

     

binutils:2.23.1 gcc:4.7.2 newlib:1.20.0 gdb:7.5.1

     

(2012年12月22日,mifi)openocd o.7.0

1 个答案:

答案 0 :(得分:5)

这里没有任何默认构造。

指针转换会导致任何dline_periph个点被解释为MDLPeriph个对象,而不会创建新对象;然后用于使用其复制构造函数复制初始化periph_dline