C++ Bento4,实例管理(创建/发布)

C++ Bento4,实例管理(创建/发布),c++,C++,我想使用Bento4解析MP4文件,并检查它们是否有一个或多个曲目 AP4_ByteStream* inputFileStream = NULL; AP4_Result res = AP4_FileByteStream::Create(file.c_str(), AP4_FileByteStream::STREAM_MODE_READ, inputFileStream); if(res != AP4_SUCCESS || inputFileStream == NULL)

我想使用Bento4解析MP4文件,并检查它们是否有一个或多个曲目

    AP4_ByteStream* inputFileStream = NULL;
    AP4_Result res = AP4_FileByteStream::Create(file.c_str(), AP4_FileByteStream::STREAM_MODE_READ, inputFileStream);
    if(res != AP4_SUCCESS || inputFileStream == NULL) {throw std::logic_error("Error while analyzing " + file);}

    AP4_File inputFileParser(*inputFileStream);
    AP4_Movie* pMovie = inputFileParser.GetMovie();
    const AP4_List< AP4_Track >& trackList = pMovie->GetTracks();
    inputFileStream->Release();
    return (trackList.ItemCount()>1);
AP4_ByteStream*inputFileStream=NULL;
AP4_Result res=AP4_FileByteStream::Create(file.c_str(),AP4_FileByteStream::STREAM_MODE_READ,inputFileStream);
如果(res!=AP4_SUCCESS | | inputFileStream==NULL){throw std::logic_error(“分析“+文件时出错”)}
AP4_文件inputFileParser(*inputFileStream);
AP4_Movie*pMovie=inputFileParser.GetMovie();
const AP4_List&trackList=pMovie->GetTracks();
inputFileStream->Release();
返回(trackList.ItemCount()>1);
AP4_FileByteStream类提供了create函数并保护了它的dtor,这就是为什么有一个
release
函数

但在这种情况下,我使用来自使用FileByTestStream初始化的解析器的指针和常量引用。我们怎么能期望
返回(trackList.ItemCount()>1)发布后的工作

根据我做的实验,它是有效的,但我可能很幸运! 你知道吗?
我考虑将
inputFileStream
作为一个
shared\u ptr
,仅在返回评估之后释放资源。它更安全吗?

简单点有什么问题吗

bool hasMultipleTracks = trackList.ItemCount() > 1;
inputFileStream->Release();
return hasMultipleTracks;

没有Bento4标签,我没有足够的声誉来创建它…是的,同意这是最简单的安全方法!但这种工厂/发布模式确实令人痛苦。。。。