Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- typedef int A;
- typedef int B;
- typedef int C;
- class OptimisedT {
- public:
- OptimisedT(A* a,B* b, C* c): referencesLocals_(true), local1(a), local2(b), local3(c) { }
- /*
- OptimisedT(Normal, Ctor, Stuff): referencesLocals_(false) {
- local1 = new A;
- local2 = new B;
- local3 = new C;
- }
- */
- OptimisedT(const OptimisedT& from): referencesLocals_(false) {
- local1 = new A(*from.local1);
- local2 = new B(*from.local2);
- local3 = new C(*from.local3);
- }
- /*usual stuff*/
- /*
- WHATEVER doStuff() {
- return local1->doStuff(local2,local3);
- }
- */
- bool referencesLocals() {
- return referencesLocals_;
- }
- ~OptimisedT() {
- if(!referencesLocals_) {
- delete local1;
- delete local2;
- delete local3;
- }
- }
- private:
- bool referencesLocals_;
- A* local1;
- B* local2;
- C* local3;
- };
- OptimisedT ret()
- {
- A a = 3;
- B b = 4;
- C c = 5;
- OptimisedT r(&a, &b, &c);
- std::cout << r.referencesLocals() << std::endl;
- return r;
- }
- int main()
- {
- std::cout << ret().referencesLocals() << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement