Beispiel #1
0
int main()
{
    {
        std::unique_ptr<B> bptr(new B);
        std::unique_ptr<A> aptr(new A);
        testAssign(aptr, bptr);
    }
    assert(A::count == 0);
    assert(B::count == 0);
    {
        Deleter<B> del(42);
        std::unique_ptr<B, Deleter<B> > bptr(new B, std::move(del));
        std::unique_ptr<A, Deleter<A> > aptr(new A);
        testAssign(aptr, bptr);
        checkDeleter(aptr, bptr, 42, 0);
    }
    assert(A::count == 0);
    assert(B::count == 0);
    {
        CDeleter<A> adel(6);
        CDeleter<B> bdel(42);
        std::unique_ptr<B, CDeleter<B>&> bptr(new B, bdel);
        std::unique_ptr<A, CDeleter<A>&> aptr(new A, adel);
        testAssign(aptr, bptr);
        checkDeleter(aptr, bptr, 42, 42);
    }
    assert(A::count == 0);
    assert(B::count == 0);
}
Beispiel #2
0
void testMoveConvertImplicit(Deleter&& del) {
#else
void testMoveConvertImplicit(Deleter& del) {
#endif
    int old_val = del.state();
    { // Test Implicit constructor
        BPtr s(new B, std::forward<Deleter>(del));
        A* p = s.get();
        APtr s2 = std::move(s);
        assert(s2.get() == p);
        assert(s.get() == 0);
        checkDeleter(s, s2, del.state(), old_val);
        assert(A::count == 1);
        assert(B::count == 1);
    }
    assert(A::count == 0);
    assert(B::count == 0);
}