Changeset b84d5d for src/vector.cpp


Ignore:
Timestamp:
Feb 26, 2010, 9:55:28 AM (15 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
1ec0ac
Parents:
e3cbf9
Message:

FIX: operator implementation of Vector algebra was wrong and caused memory leaks.

  • operator+, operator- and operator* were implemented as creating new Vectors and returning its pointer instead of creating an object and returning it as constant. This would cause memory leaks, as these pointers in complex algebraic expressions would never get free'd.
  • return values of operatorx= with x in {+,-,*} have been made const (suggested by Meyers' Effective C++)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/vector.cpp

    re3cbf9 rb84d5d  
    328328    return false;
    329329  }
     330  delete(M);
    330331  Log() << Verbose(1) << "INFO: Line1a = " << *Line1a << ", Line1b = " << *Line1b << ", Line2a = " << *Line2a << ", Line2b = " << *Line2b << "." << endl;
    331332
     
    583584 * \return lhs + a
    584585 */
    585 Vector& operator+=(Vector& a, const Vector& b)
     586const Vector& operator+=(Vector& a, const Vector& b)
    586587{
    587588  a.AddVector(&b);
     
    594595 * \return lhs - a
    595596 */
    596 Vector& operator-=(Vector& a, const Vector& b)
     597const Vector& operator-=(Vector& a, const Vector& b)
    597598{
    598599  a.SubtractVector(&b);
     
    605606 * \return lhs.x[i] * m
    606607 */
    607 Vector& operator*=(Vector& a, const double m)
     608const Vector& operator*=(Vector& a, const double m)
    608609{
    609610  a.Scale(m);
     
    616617 * \return a + b
    617618 */
    618 Vector& operator+(const Vector& a, const Vector& b)
    619 {
    620   Vector *x = new Vector;
    621   x->CopyVector(&a);
    622   x->AddVector(&b);
    623   return *x;
     619Vector const operator+(const Vector& a, const Vector& b)
     620{
     621  Vector x(a);
     622  x.AddVector(&b);
     623  return x;
    624624};
    625625
     
    629629 * \return a - b
    630630 */
    631 Vector& operator-(const Vector& a, const Vector& b)
    632 {
    633   Vector *x = new Vector;
    634   x->CopyVector(&a);
    635   x->SubtractVector(&b);
    636   return *x;
     631Vector const operator-(const Vector& a, const Vector& b)
     632{
     633  Vector x(a);
     634  x.SubtractVector(&b);
     635  return x;
    637636};
    638637
     
    642641 * \return m * a
    643642 */
    644 Vector& operator*(const Vector& a, const double m)
    645 {
    646   Vector *x = new Vector;
    647   x->CopyVector(&a);
    648   x->Scale(m);
    649   return *x;
     643Vector const operator*(const Vector& a, const double m)
     644{
     645  Vector x(a);
     646  x.Scale(m);
     647  return x;
    650648};
    651649
     
    655653 * \return m * a
    656654 */
    657 Vector& operator*(const double m, const Vector& a )
    658 {
    659   Vector *x = new Vector;
    660   x->CopyVector(&a);
    661   x->Scale(m);
    662   return *x;
    663 };
    664 
    665 Vector& Vector::operator=(const Vector& src) {
    666   CopyVector(src);
    667   return *this;
    668 }
     655Vector const operator*(const double m, const Vector& a )
     656{
     657  Vector x(a);
     658  x.Scale(m);
     659  return x;
     660};
    669661
    670662/** Prints a 3dim vector.
Note: See TracChangeset for help on using the changeset viewer.