std::unique_ptr的用法

Posted cyh706510441

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std::unique_ptr的用法相关的知识,希望对你有一定的参考价值。

  std::ofstream("demo.txt") << x; // 准备要读的文件
  {
      std::unique_ptr<std::FILE, decltype(&std::fclose)> fp(std::fopen("demo.txt", "r"),
                                                            &std::fclose);
      if(fp) // fopen 可以打开失败;该情况下 fp 保有空指针
        std::cout << (char)std::fgetc(fp.get()) << \n;
  } // fclose() 调用于此,但仅若 FILE* 不是空指针
    // (即 fopen 成功)

自动调用fclose

struct CallHelper {
  CallHelper() {
    webrtc::Audiostate::Config audio_state_config;
    audio_state_config.audio_mixer =
        new rtc::RefCountedObject<webrtc::test::MockAudioMixer>();
    audio_state_config.audio_processing =
        new rtc::RefCountedObject<webrtc::test::MockAudioProcessing>();
    audio_state_config.audio_device_module =
        new rtc::RefCountedObject<webrtc::test::MockAudioDeviceModule>();
    webrtc::Call::Config config(&event_log_);
    config.audio_state = webrtc::AudioState::Create(audio_state_config);
    call_.reset(webrtc::Call::Create(config));
  }

  webrtc::Call* operator->() { return call_.get(); } // 注意此处

 private:
  webrtc::RtcEventLogNullImpl event_log_;
  std::unique_ptr<webrtc::Call> call_;
};
TEST(CallTest, CreateDestroy_AudioSendStream) {
  CallHelper call;
  AudioSendStream::Config config(nullptr);
  config.rtp.ssrc = 42;
  AudioSendStream* stream = call->CreateAudioSendStream(config); // 注意此处
  EXPECT_NE(stream, nullptr);
  call->DestroyAudioSendStream(stream);
}

 

以上是关于std::unique_ptr的用法的主要内容,如果未能解决你的问题,请参考以下文章

智能指针用法

智能指针unique_ptr用法

使用 std::unique_ptr 的 C++ Pimpl Idiom 不完整类型

通过 std::unique_ptr 的 LazyArray 模板,这是双重检查习语的正确实现吗?

与 std::unique_ptr 相关的错误

比较 std::unique_ptr 指向的底层(派生)类型