C++11 我们应该在什么时候对类memeber变量使用std::unique_ptr和std::shared_ptr?
我知道C++11 我们应该在什么时候对类memeber变量使用std::unique_ptr和std::shared_ptr?,c++11,pointers,smart-pointers,C++11,Pointers,Smart Pointers,我知道std::unique\u ptr和std::shared\u ptr背后的一般理念。如果没有其他指针变量要求访问唯一指针指向的对象/基本数据,则应使用唯一指针。但是,存在一个共享指针,用于对单个资源(如文件)进行共享/并发访问 当然,指针类型的类数据成员也是如此。然而,特别是在执行层面,这一一般规则是否涵盖所有情况 假设您有一个包含3个成员变量的类,所有变量都是指针类型。如果没有任何成员函数返回指向其中一个变量(如getter函数)的指针,则应将成员变量声明为std::unique\u
std::unique\u ptr
和std::shared\u ptr
背后的一般理念。如果没有其他指针变量要求访问唯一指针指向的对象/基本数据,则应使用唯一指针。但是,存在一个共享指针,用于对单个资源(如文件)进行共享/并发访问
当然,指针类型的类数据成员也是如此。然而,特别是在执行层面,这一一般规则是否涵盖所有情况
- 假设您有一个包含3个成员变量的类,所有变量都是指针类型。如果没有任何成员函数返回指向其中一个变量(如getter函数)的指针,则应将成员变量声明为
类型。但是,如果返回这些成员变量中的一个,则可能会出现另一个指针试图绑定到同一资源的情况。在这种情况下,您应该声明该特定成员的类型为std::unique\u ptr
std::shared\u ptr
unique_ptr的另一个好处是,在大多数情况下,它的大小与原始ptr相同。所以它比共享的要小和快。IMO,这个问题本身就有点宽泛。首先,您需要决定是否需要智能指针,或者是否可以按值存储。如果您真的需要使用指针,那么主要是所有权问题,而不是访问问题。我想几年前赫伯·萨特(Herb Sutter)或阿瑟·奥德怀尔(Arthur O'Dwyer)就这个话题进行了一次很好的CppCon演讲。@chtz所以它更多的是关于,哪个类负责删除哪个对象,而不是谁需要访问?依我看,这个问题有点宽泛。首先,您需要决定是否需要智能指针,或者是否可以按值存储。如果您真的需要使用指针,那么主要是所有权问题,而不是访问问题。我想几年前Herb Sutter或Arthur O'Dwyer就这个话题进行了一次很好的CppCon演讲。@chtz更多的是关于哪个类负责删除哪个对象,而不是谁需要访问?