构造函数返回值指针问题

今天遇到了这样的一个坑:

  • release模式下,将一个构造函数构造出来的东西的指针直接传递到别的地方,其中的内容会出错

向大佬请教后意识到:

  • 因为构造函数构造的内容在之后并没有再次被用到,可能被编译器优化掉了(因为在debug模式下没有问题),所以传递的指针里面根本就没有构造

解决:

  • 使用new语句,或者直接在外面定义,再把指针传递进去

代码:

1
2
3
4
5
6
7
8
// Since that Rect<DATATYPE, NUMDIMS>(1, &p) is just a local variable, in release version, may not create it!!!!!!! So &(Rect<DATATYPE, NUMDIMS>(1, &p)) returns an invalid pointer!!!!!!!!!!
// So can't use like this:
// Rect<DATATYPE, NUMDIMS>* newRect[2] = { &(a->border), &(Rect<DATATYPE, NUMDIMS>(1, &p)) };
// But can use like below:
// Rect<DATATYPE, NUMDIMS>* newRect[2] = { &(a->border), new Rect<DATATYPE, NUMDIMS>(1, &p) };
// finally used it:
Rect<DATATYPE, NUMDIMS> wtfvs(1, &p);
Rect<DATATYPE, NUMDIMS>* newRect[2] = { &(a->border), &(wtfvs) };