淘先锋技术网

首页 1 2 3 4 5 6 7

RTSP的创建过程大致如下:
m_pScheduler = new BasicTaskScheduler::createNew(100 * 1000);
m_pEnv = new BasicUsageEnvironment::createNew(*m_pScheduler);
m_pRtspServer = new RTSPServer::createNew(*m_pEnv, nPort, NULL);

以上三个类构造函数都是protected,通过接口createNew完成对象的创建;
其中RTSPServer和BasicUsageEnvironment两个类的析构函数同样也是protected,所以不能直接delete对象本身。

销毁对象的方式如下:
RTSPServer -> RTSPServer::close(*m_pEnv, m_pRtspServer->name());
BasicUsageEnvironment -> m_pEnv->reclaim();
BasicTaskScheduler -> delete m_pScheduler;

====================
三个类的简短描述
[BasicTaskScheduler]

继承关系:
TaskScheduler
       ^
        |
        |
BasicTaskScheduler0
       ^
        |
        |
BasicTaskScheduler

BasicTaskScheduler不是Medium继承来的,构造函数时protected,但是析构函数是public的。
    创建:存在接口createNew
    销毁:因为析构函数是public的,可以直接delete
----------------------------
[BasicUsageEnvironment]

继承关系:
UsageEnvironment
       ^
        |
        |
BasicUsageEnvironment0
       ^
        |
        |
BasicUsageEnvironment

BasicUsageEnvironment 不是Medium继承来的,构造和析构函数为protected,不能直接进行删除。
    创建:存在一个接口createNew来创建
    销毁:通过一个public函数reclaim来实现销毁,前提其自身内部没有管理的Medium对象。
----------------------------
[RTSPServer]

继承关系:
Medium
       ^
        |
        |
GenericMediaServer
       ^
        |
        |
RTSPServer

RTSPServer的构造和析构函数都是protected
    创建:通过createNew接口进行创建
    销毁:因为是protected的,所以delete函数不能进行删除。因为继承自Medium类,并且从Medium进行而来的所有类的析构函数都是virtual的。因此通过删除Medium类完成对象RTSPServer的析构。
        在类Medium中有两个静态接口如下,完成指定environment下的指定mediumName的对象的释放。
            static void close(UsageEnvironment& env, char const* mediumName);
            static void close(Medium* medium);