我有一个创建一个非常大的std :: vector的函数。返回此向量时,由于其大小,我不想再次复制它。因此,我想返回对该向量的引用。但是,这样做会给我一个分段错误。为什么是这样?解决方案是什么?
这是我的代码:
0° matrix( 0, 0, 0, 0, 0, 0)
45° matrix( .7, .7, -.7, .7, 0, 0)
90° matrix( 0, 1, -1, 0, 0, 0)
180° matrix( -1, 0, 0, -1, 0, 0)
270° matrix( 0, -1, 1, 0, 0, 0)
答案 0 :(得分:4)
您的矢量是局部变量。它存在于函数中,并在函数结束时被销毁。
因此,您的参考是晃来晃去。它指的是一个不再存在的对象。
只是按价值回归;你的编译器足够智能,可以优化掉无意义的副本,即使你是C ++ 11之前的版本,因此没有移动语义。