r217474 - Unique_ptrify PPCallbacks ownership.

Kim Gräsman kim.grasman at gmail.com
Wed Sep 10 23:46:14 PDT 2014


Hi Craig,

On Thu, Sep 11, 2014 at 7:19 AM, Craig Topper <craig.topper at gmail.com> wrote:
> You'll notice half the places in clang that called addPPCallbacks ended up
> with a cast to std::unique_ptr in the call to addPPCallbacks for the same
> reason. But given that I find that kind of ugly I think I'll revert the
> interface part of the change.

D'oh, I see now. Wrapping the raw pointer in a std::unique_ptr and
transferring ownership won't move the raw pointer, only the smart
pointer.

>>     IwyuPreprocessorInfo* const preprocessor_consumer
>>         = new IwyuPreprocessorInfo();
>>     compiler.getPreprocessor().addPPCallbacks(preprocessor_consumer);  // here
>>     compiler.getPreprocessor().addCommentHandler(preprocessor_consumer); // here
>>
>>     VisitorState* const visitor_state
>>         = new VisitorState(&compiler, *preprocessor_consumer);  // and here

I mistakenly thought that unique_ptr disabled the ability to share the
pointer entirely, but I could just do:

  IwyuPreprocessorInfo* preprocessor_consumer = new IwyuPreprocessorInfo();
  compiler.getPreprocessor().addPPCallbacks(std::unique_ptr<PPCallbacks>(preprocessor_consumer));
  compiler.getPreprocessor().addCommentHandler(preprocessor_consumer);

  VisitorState* const visitor_state = new VisitorState(&compiler,
*preprocessor_consumer);

My mistake for misreading the impact of this change, sorry about the noise.

- Kim



More information about the cfe-commits mailing list