c ++ 14中unique_ptr和shared_ptr语法之间的区别

时间:2017-03-22 08:44:55

标签: c++ c++14 shared-ptr unique-ptr c++17

我想知道c ++ 14中unique_ptr和shared_ptr之间的差异如下所示。

示例程序(http://ideone.com/A4As5B):

#include <memory>

int main() {
    std::unique_ptr<unsigned char[]> ptr1 = std::unique_ptr<unsigned char[]>(new unsigned char[10]);
    std::shared_ptr<unsigned char[]> ptr2 = std::shared_ptr<unsigned char[]>(new unsigned char[10]);
    return 0;
}

给出了这个编译错误:

Compilation error   time: 0 memory: 0 signal:0
In file included from /usr/include/c++/6/bits/shared_ptr.h:52:0,
                 from /usr/include/c++/6/memory:82,
                 from prog.cpp:2:
/usr/include/c++/6/bits/shared_ptr_base.h: In instantiation of ‘std::__shared_ptr<_Tp, _Lp>::__shared_ptr(_Tp1*) [with _Tp1 = unsigned char; _Tp = unsigned char []; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]’:
/usr/include/c++/6/bits/shared_ptr.h:117:32:   required from ‘std::shared_ptr<_Tp>::shared_ptr(_Tp1*) [with _Tp1 = unsigned char; _Tp = unsigned char []]’
prog.cpp:6:96:   required from here
/usr/include/c++/6/bits/shared_ptr_base.h:885:39: error: cannot convert ‘unsigned char*’ to ‘unsigned char (*)[]’ in initialization
         : _M_ptr(__p), _M_refcount(__p)
                                       ^

我的问题是,为什么数组分配的unique_ptr语法使其成为c ++ 14,但对于shared_ptr,我们必须等到c ++ 17?两个智能指针之间是否有任何概念上的差异,当为unique_ptr指定时,这使得非直接指定share_ptr?

0 个答案:

没有答案