--- a/vector.cc
+++ b/vector.cc
@@ -10,6 +10,8 @@
#define GETRANDOM(max) (1+(int)((float)max*rand()/RAND_MAX+1.0))
#define MAX 6
+static int refCounter = 0;
+
namespace algebra {
class Vector {
private:
@@ -18,6 +20,7 @@
public:
Vector (int xx = 0, int yy = 0);
+ Vector (const Vector &);
~Vector ();
int X () { return x; };
@@ -33,10 +36,19 @@
Vector::Vector (int xx, int yy) {
x = xx;
y = yy;
+
+ refCounter++;
+ }
+
+ Vector::Vector (const Vector & copy)
+ : x (copy.x), y (copy.y) {
+ fprintf (stderr, "Warning Copy Constructor\n");
+ refCounter++;
}
Vector::~Vector () {
fprintf (stderr, "Removing Vector (%.3d, %.3d)\n", x, y);
+ refCounter--;
}
Vector Vector::operator+ (Vector & v) {
@@ -60,7 +72,7 @@
int main (int argc, char **argv)
{
- Vector *v[MAX];
+ Vector **v;
Vector result;
srand (time (NULL));
@@ -70,6 +82,8 @@
return EXIT_FAILURE;
}
+ v = new Vector *[MAX];
+
for (int i = 0; i < MAX; i++) {
v[i] = new Vector (GETRANDOM (100), GETRANDOM (100));
}
@@ -96,10 +110,12 @@
printf (" = %3.2f\n", result.abs ());
}
- printf ("\nCLEANUP\n");
-
for (int i = 0; i < MAX; i++)
delete v[i];
+ delete [] v;
+
+ fprintf (stderr, "Objects remaining on exit: %d\n", refCounter);
+
return EXIT_SUCCESS;
}