← index
cplusplus11.Examples/smart_pointer/smart.cpp
Source: cplusplus11.Examples/smart_pointer/smart.cpp
#include<iostream>
#include<memory>


// a simple user type to practice smart pointers
template<typename T>
class UserType {
public:
    UserType() { type = T(); }
    UserType(const T &t) : type(t) { }
    
    void print() {
        std::cout << type << " ";
    }
    
    void set(const T t) {
        type = t;
    }
    
protected:
    T type;
    
};


void test(std::shared_ptr<UserType<int>> passedValue) {
    passedValue->set(200);
    std::cout << "value is: ";
    passedValue->print();
}

void testPointer() {
    
    auto deleter = [](UserType<int> *type1) {
        std::cout << "Deleteing..\n";
        delete type1;
    };
    
    std::shared_ptr<UserType<int>> value1(new UserType<int>(100), deleter);
    for(unsigned int i = 0; i < 10; ++i) {
        std::cout << "{ ";
        value1->print();
        std::cout << "}\n";
    }
    test(value1); // add to reference count
    std::cout << "value1's value is now: ";
    value1->print();
    
}

int main(void) {
    
    auto deleter = [](UserType<int> *type) {
        std::cout << "Deleting UserType for unique on destructor..\n";
        delete type;
    };
    
    
    std::unique_ptr<UserType<int>, decltype(deleter)> first(new UserType<int>(25), deleter);
    testPointer();
    std::cout << "Unique's value: ";
    first->print();
    std::cout << "\n";
    
    
    return 0;
}