C++ 如果我定义一个指向智能指针的指针,这会消除智能指针的优点吗?
C++智能指针:如果在一个类中,我定义了一个指向智能指针的指针,这会消除智能指针的优点吗?(注意,我没有说我想应用这种用法) 比如: 这里SmartPt是智能指针类 因为如果我没有很好地管理指针,那么指向的智能指针也不会被管理 那么,这是否意味着使用指向智能指针的指针不是一个好做法? 因此,最好直接使用智能指针,如:C++ 如果我定义一个指向智能指针的指针,这会消除智能指针的优点吗?,c++,smart-pointers,pointer-to-pointer,C++,Smart Pointers,Pointer To Pointer,C++智能指针:如果在一个类中,我定义了一个指向智能指针的指针,这会消除智能指针的优点吗?(注意,我没有说我想应用这种用法) 比如: 这里SmartPt是智能指针类 因为如果我没有很好地管理指针,那么指向的智能指针也不会被管理 那么,这是否意味着使用指向智能指针的指针不是一个好做法? 因此,最好直接使用智能指针,如: public SmartPt object1; [更新1]为了不分散读者的注意力,以前我使用mysmart,这里我将其替换为SmartPt。不,您不应该尝试使用指向智能指针的指针
public SmartPt object1;
[更新1]为了不分散读者的注意力,以前我使用mysmart,这里我将其替换为SmartPt。不,您不应该尝试使用指向智能指针的指针,如您正在共享的示例中所示
C++中的智能指针是围绕RAII原理建立的,它试图尽可能地去除*运算符。它们还使用原始指针无法理解的复制/赋值重载。
因此,如果您的意思是这样做:void * vptr;
int i = 1346;
std::shared_ptr<int> sptr = std::make_shared<int>(i);
vptr = &sptr;
void*vptr;
int i=1346;
std::shared_ptr sptr=std::make_shared(i);
vptr=&sptr;
然后,一旦共享指针超出范围,它就会删除自己,因为这是它应该做的。智能指针不保留指向它们的指针引用,只保留指向它们的数据的智能指针引用
此外,如果调用删除vptr代码>将发生以下两种情况之一:
智能指针会因为调用了delete而非常生气
如果智能指针超出范围,则vptr
指向无效内存块
你能发布你如何“定义一个指向智能指针的指针”的代码吗?在某些情况下,你可能需要这样的指向智能指针的指针,但我很难想到一个现实的应用程序。你能给我们看一些你认为使用这样一个指针有用的代码吗?@5gon12eder,不,我不特别想使用它。我只是看到了代码,并且认为我可以修改它。我不明白为什么需要创建一个新的智能指针类。@Eric。好的,这是包好的。离题。在此示例中,我们只能使用常规智能指针作为示例。我只是想确认我们不需要使用指向智能指针的指针。
void * vptr;
int i = 1346;
std::shared_ptr<int> sptr = std::make_shared<int>(i);
vptr = &sptr;