zoukankan      html  css  js  c++  java
  • c++ Dynamic Memory (part 2)

    Don't use get to initialize or assign another smart pointer.

    The code that use the return from get can not delete the pointer

    Although the compiler will not complain, it is an error to build another smart pointer to the pointer returned by get

    shared_ptr<int> p(new int(42));    // reference count is 1
    int *q = p.get();    // ok; but do not delete its pointer
    {
        shared_ptr<int> (q);
    }    // block ends. q is destroyed, and the memory to which q points is freed
    int f = *p;    // undefined. The memory to which p points is freed. 

    Using Our Own Deletion Code

    void end_connection(connection *p)
    {
        disconnection(*p);
    }
    
    void f(destination &d)
    {
        connection c = conn(&d);
        shared_ptr<connection p(&c, end_connection);
        // use the connection
        // when f exists, even if by an exception, the connection resource will be properly closed
    }

    For unique_ptr

    Call release() breaks the connection between a unique_ptr and the object it had been managing. Ofter the pointer returned by release() is used to initialized or assign another pointer

    unique_ptr<int> p2(new int(42));
    p2.release();    // WRONG! P2 will not free the memory, and we have lose the pointer
    auto p = p2.release();    // OK, but we must remember to delete p

    Backward compatibilities auto_ptr

    Although auto_ptr is still part of the standard library, programs should use unique_ptr instead.

  • 相关阅读:
    模型性能评估
    特征提取(机器学习数据预处理)
    决策树(DecisionTree)(附源码)
    支持向量机(SVM)
    Python机器学习/LogisticRegression(逻辑回归模型)(附源码)
    机器学习大致流程
    机器学习的数据预处理
    tensorflow的断点续训
    tensorboard可视化详细
    Linux启动tomcat
  • 原文地址:https://www.cnblogs.com/TonyYPZhang/p/6854544.html
Copyright © 2011-2022 走看看