Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果我定义一个指向智能指针的指针,这会消除智能指针的优点吗?_C++_Smart Pointers_Pointer To Pointer - Fatal编程技术网

C++ 如果我定义一个指向智能指针的指针,这会消除智能指针的优点吗?

C++ 如果我定义一个指向智能指针的指针,这会消除智能指针的优点吗?,c++,smart-pointers,pointer-to-pointer,C++,Smart Pointers,Pointer To Pointer,C++智能指针:如果在一个类中,我定义了一个指向智能指针的指针,这会消除智能指针的优点吗?(注意,我没有说我想应用这种用法) 比如: 这里SmartPt是智能指针类 因为如果我没有很好地管理指针,那么指向的智能指针也不会被管理 那么,这是否意味着使用指向智能指针的指针不是一个好做法? 因此,最好直接使用智能指针,如: public SmartPt object1; [更新1]为了不分散读者的注意力,以前我使用mysmart,这里我将其替换为SmartPt。不,您不应该尝试使用指向智能指针的指针

C++智能指针:如果在一个类中,我定义了一个指向智能指针的指针,这会消除智能指针的优点吗?(注意,我没有说我想应用这种用法)

比如:

这里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;