• Stephan Bergmann's avatar
    Make E3dScene3D::GetCamera return non-reference · fd6263e3
    Stephan Bergmann yazdı
    I stumbled over this when Valgrind'ing CppunitTest_sd_filters_test somewhat
    erroneously reported
    
      Source and destination overlap in memcpy(0x2fde4af8, 0x2fde4af8, 96)
    
    for
    
      aCamera = rNewCamera;
    
    in E3dScene::SetCamera (svx/source/engine3d/scene3d.cxx), where the compiler
    chose to use memcpy in the implicit definition of the Viewport3D (being a base
    class of Camera3D) copy assignment operator, and the call pattern of
    Get/SetCamera in EnhancedCustomShape3d::Create3DObject
    (svx/source/customshapes/EnhancedCustomShape3d.cxx) causes that assignment to be
    a self-assignment.
    
    Upon closer inspection, some calls of GetCamera already create a copy from the
    returned reference, while others modified the returned reference, but then would
    also always call SetCamera on it.  An alternative to the given change would have
    been to instead change SetCamera(Camera3D&) to UpdateCamera() and require all
    call sites of GetCamera/UpdateCamera to modify the reference returned from
    GetCamera, but it looks safer overall to go this way.
    
    Change-Id: I578e72db57630dca1b09124a3b11d177005b797d
    fd6263e3
scene3d.hxx 6.03 KB