[geos-commits] r2700 - in trunk/source: headers/geos/linearref linearref

svn_geos at osgeo.org svn_geos at osgeo.org
Fri Oct 23 09:04:19 EDT 2009


Author: strk
Date: 2009-10-23 09:04:18 -0400 (Fri, 23 Oct 2009)
New Revision: 2700

Modified:
   trunk/source/headers/geos/linearref/LinearLocation.h
   trunk/source/linearref/LinearLocation.cpp
Log:
Have LinearLocation::getSegment return by auto_ptr to encode ownership transfer. Fixes leak reported in #296.


Modified: trunk/source/headers/geos/linearref/LinearLocation.h
===================================================================
--- trunk/source/headers/geos/linearref/LinearLocation.h	2009-10-23 12:58:48 UTC (rev 2699)
+++ trunk/source/headers/geos/linearref/LinearLocation.h	2009-10-23 13:04:18 UTC (rev 2700)
@@ -22,6 +22,7 @@
 #define GEOS_LINEARREF_LINEARLOCATION_H
 
 #include <string>
+#include <memory> // for std::auto_ptr
 
 #include <geos/geom/Coordinate.h>
 #include <geos/geom/Geometry.h>
@@ -167,7 +168,7 @@
 	 * @param linearGeom a linear geometry
 	 * @return the <tt>LineSegment</tt> containing the location
 	 */
-	geom::LineSegment *getSegment(const geom::Geometry* linearGeom) const;
+	std::auto_ptr<geom::LineSegment> getSegment(const geom::Geometry* linearGeom) const;
 
 	/**
 	 * Tests whether this location refers to a valid

Modified: trunk/source/linearref/LinearLocation.cpp
===================================================================
--- trunk/source/linearref/LinearLocation.cpp	2009-10-23 12:58:48 UTC (rev 2699)
+++ trunk/source/linearref/LinearLocation.cpp	2009-10-23 13:04:18 UTC (rev 2700)
@@ -209,7 +209,7 @@
 }
 
 /* public */
-LineSegment*
+std::auto_ptr<LineSegment>
 LinearLocation::getSegment(const Geometry* linearGeom) const
 {
 	const LineString* lineComp = dynamic_cast<const LineString *> (linearGeom->getGeometryN(componentIndex));
@@ -218,10 +218,10 @@
 	if (segmentIndex >= lineComp->getNumPoints() - 1)
 	{
 		Coordinate prev = lineComp->getCoordinateN(lineComp->getNumPoints() - 2);
-		return new LineSegment(prev, p0);
+		return std::auto_ptr<LineSegment>(new LineSegment(prev, p0));
 	}
 	Coordinate p1 = lineComp->getCoordinateN(segmentIndex + 1);
-	return new LineSegment(p0, p1);
+	return std::auto_ptr<LineSegment>(new LineSegment(p0, p1));
 }
 
 /* public */
@@ -278,7 +278,7 @@
 }
 
 
-/* public */
+/* public static */
 int
 LinearLocation::compareLocationValues(
 	unsigned int componentIndex0, unsigned int segmentIndex0,



More information about the geos-commits mailing list