aboutsummaryrefslogtreecommitdiffstats
path: root/libtests/pointer_holder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libtests/pointer_holder.cc')
-rw-r--r--libtests/pointer_holder.cc81
1 files changed, 81 insertions, 0 deletions
diff --git a/libtests/pointer_holder.cc b/libtests/pointer_holder.cc
new file mode 100644
index 00000000..9176df17
--- /dev/null
+++ b/libtests/pointer_holder.cc
@@ -0,0 +1,81 @@
+
+#include <qpdf/PointerHolder.hh>
+
+#include <iostream>
+#include <stdlib.h>
+#include <list>
+
+#include <qpdf/QUtil.hh>
+
+class Object
+{
+ public:
+ Object();
+ ~Object();
+ void hello();
+
+ private:
+ static int next_id;
+ int id;
+};
+
+
+int Object::next_id = 0;
+
+Object::Object()
+{
+ this->id = ++next_id;
+ std::cout << "created Object, id " << this->id << std::endl;
+}
+
+Object::~Object()
+{
+ std::cout << "destroyed Object, id " << this->id << std::endl;
+}
+
+void
+Object::hello()
+{
+ std::cout << "calling Object::hello for " << this->id << std::endl;
+}
+
+typedef PointerHolder<Object> ObjectHolder;
+
+int main(int argc, char* argv[])
+{
+ std::list<ObjectHolder> ol1;
+
+ ObjectHolder oh0;
+ {
+ std::cout << "hello" << std::endl;
+ Object* o1 = new Object;
+ ObjectHolder oh1(o1);
+ ObjectHolder oh2(oh1);
+ ObjectHolder oh3(new Object);
+ ObjectHolder oh4;
+ ObjectHolder oh5;
+ if (oh4 == oh5)
+ {
+ std::cout << "nulls equal" << std::endl;
+ }
+ oh3 = oh1;
+ oh4 = oh2;
+ if (oh3 == oh4)
+ {
+ std::cout << "equal okay" << std::endl;
+ }
+ if ((! (oh3 < oh4)) && (! (oh4 < oh3)))
+ {
+ std::cout << "less than okay" << std::endl;
+ }
+ ol1.push_back(oh3);
+ ol1.push_back(oh3);
+ Object* o3 = new Object;
+ oh0 = o3;
+ }
+
+ ol1.front().getPointer()->hello();
+ ol1.pop_front();
+ std::cout << "goodbye" << std::endl;
+ return 0;
+}