mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: avoid memory leaks for HashPtrTable, PtrMap insertion (issue #749)
- disallow insert() of raw pointers, since a failed insertion (ie, entry already existed) results in an unmanaged pointer. Either insert using an autoPtr, or set() with raw pointers or autoPtr. - IOobjectList::add() now takes an autoPtr instead of an object reference - IOobjectList::remove() now returns an autoPtr instead of a raw pointer
This commit is contained in:
@ -1,3 +1,3 @@
|
||||
Test-hashPtrTable.C
|
||||
Test-HashPtrTable.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/Test-hashPtrTable
|
||||
EXE = $(FOAM_USER_APPBIN)/Test-HashPtrTable
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
||||
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
|
||||
\\/ M anipulation | Copyright (C) 2017-2018 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -27,6 +27,7 @@ Description
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <iostream>
|
||||
#include "autoPtr.H"
|
||||
#include "HashPtrTable.H"
|
||||
|
||||
using namespace Foam;
|
||||
@ -42,7 +43,7 @@ void printTable(const HashPtrTable<T>& table)
|
||||
Info<< iter.key() << " = ";
|
||||
if (ptr)
|
||||
{
|
||||
Info<< *ptr;
|
||||
Info<< *ptr << " (" << long(ptr) << ")";
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -77,11 +78,11 @@ void printTable(const HashPtrTable<T>& table)
|
||||
int main()
|
||||
{
|
||||
HashPtrTable<double> myTable;
|
||||
myTable.insert("abc", new double(42.1));
|
||||
myTable.insert("def", nullptr);
|
||||
myTable.insert("pi", new double(3.14159));
|
||||
myTable.insert("natlog", new double(2.718282));
|
||||
myTable.insert("sqrt2", new double(1.414214));
|
||||
myTable.set("abc", new double(42.1));
|
||||
myTable.set("def", nullptr);
|
||||
myTable.set("pi", new double(3.14159));
|
||||
myTable.set("natlog", new double(2.718282));
|
||||
myTable.insert("sqrt2", autoPtr<double>::New(1.414214));
|
||||
|
||||
// Info<< myTable << endl;
|
||||
printTable(myTable);
|
||||
@ -105,6 +106,25 @@ int main()
|
||||
|
||||
printTable(myTable);
|
||||
|
||||
HashPtrTable<double> moved(std::move(copy));
|
||||
|
||||
Info<< nl << "test movable" << nl;
|
||||
Info<<"input:" << nl;
|
||||
printTable(copy);
|
||||
|
||||
Info<<"output:" << nl;
|
||||
printTable(moved);
|
||||
|
||||
HashPtrTable<double> other;
|
||||
|
||||
Info<<"move assign" << nl;
|
||||
|
||||
other = std::move(moved);
|
||||
printTable(other);
|
||||
|
||||
Info<<"old" << nl;
|
||||
printTable(moved);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user