实验测试1《C++ Primer》第五版——第十二章 动态内存

来源:互联网 发布:telnet udp 连接端口 编辑:程序博客网 时间:2024/06/04 19:19
#include <string>#include <vector>#include <iostream>#include <memory>#include <algorithm>using namespace std;class A {public:    A(string s) : s(s) {    }    A(const A &a) = default;    ~A()    {        cout << s << " ~A()" << endl;    }    const string get() const {        return s;    }    void set(const string &s) {        this->s = s;    }private:    string s;} ;void da(A *a) {    cout << a->get() << " d()" << endl;    delete a;}void test_sp_up_wp() {    auto sp = make_shared<A>("sp1");    sp.reset(new A("sp2"));    sp.reset(new A("sp3"), da);    cout << "sp.unique " << sp.unique() << endl;    cout << "sp.use_count " << sp.use_count() << endl;    {        auto sp_2 = sp;        cout << "sp_2.use_count " << sp_2.use_count() << endl;        sp_2->set("sp_2");    }    weak_ptr<A> w(sp);    auto w2 = w;    cout << "sp.use_count " << sp.use_count() << endl;    if (auto r = w2.lock())        cout << r->get() << endl;    unique_ptr < A, decltype(da)*> uq1(new A("uq1"), da);    uq1 = nullptr;    A a("A_object");    unique_ptr<A> uq2(&a);    cout << uq2.release()->get() << endl;}void test_allocator() {    vector<A> v = {A("1"), A("2"), A("3"), A("4")};    allocator<A> a;    A * const p = a.allocate(16 + 1);    a.construct(p, "start");    auto start = p + 1;    uninitialized_copy(v.cbegin(), v.cend(), start);    uninitialized_copy_n(v.cbegin(),  v.size(), start + v.size());    uninitialized_fill(start + 2 * v.size(), start + 3 * v.size(), "1234");    uninitialized_fill_n(start + 3 * v.size(), v.size(), "1234");    for_each(p, p + 16 + 1, [](const A & a) {        static int i = 0;        cout << i++ << ":" << a.get() << endl;    });    a.destroy(p);    a.deallocate(p, 16 + 1);}int main(int argc, char** argv) {    cout << "=======================test_sp_up_wp=====================" << endl;    test_sp_up_wp();    cout << "=========================================================" << endl;    cout << "=======================test_allocator=====================" << endl;    test_allocator();    cout << "=========================================================" << endl;    return 0;}

输出结果

=======================test_sp_up_wp=====================sp1 ~A()sp2 ~A()sp.unique 1sp.use_count 1sp_2.use_count 2sp.use_count 1sp_2uq1 d()uq1 ~A()A_objectA_object ~A()sp_2 d()sp_2 ~A()================================================================================test_allocator=====================4 ~A()3 ~A()2 ~A()1 ~A()0:start1:12:23:34:45:16:27:38:49:123410:123411:123412:123413:123414:123415:123416:1234start ~A()1 ~A()2 ~A()3 ~A()4 ~A()=========================================================
阅读全文
0 0
原创粉丝点击