为什么 std::unique_ptr 与赋值运算符不兼容?

Why std::unique_ptr is not compatible with assignement operator?

例如:

std::unique_ptr<int> int_ptr = new int(10); // error: conversion from ‘int*’ to non-scalar type ‘std::unique_ptr’ requested

std::unique_ptr<int> pointer(new int(10));  // this work fine

都是初始化,不是赋值。第一种是复制初始化,第二种是直接初始化。 constructor of std::unique_ptr taking raw pointer is marked as explicit, it could be used in direct initialization but not copy initialization.

explicit unique_ptr( pointer p ) noexcept;

Direct-initialization is more permissive than copy-initialization: copy-initialization only considers non-explicit constructors and non-explicit user-defined conversion functions, while direct-initialization considers all constructors and all user-defined conversion functions.