unique_ptr超出了struct的范围

时间:2016-11-29 04:01:43

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

我的代码是这个,名为uniqueptr_scope.cpp

#include<iostream>
#include<memory>
#include<vector>

struct un{
    int i;
};

struct un2{
    int i;

    void testTheUN(){
        temp->i=1000;
    }

    void main2(){
        un u;
        temp = std::unique_ptr<un>(&u);
        std::cout<<temp->i<<"\n";
        testTheUN();

    }
    private:
        std::unique_ptr<un> temp;
};


int main(){


    un2 u;
    u.main2();


}

我用这个编译了 g++ -std=c++1y uniqueptr_scope.cpp

来到我的问题: 我想在范围或结构中检查作用域中的唯一指针。但是当我运行代码时,我的输出为

-650998192
*** Error in `./a.out': free(): invalid pointer: 0x00007fffd9328e40 ***
Aborted (core dumped)

所以在un2::main2()函数中,temp被初始化并被赋予了一些值。然后当我调用testTheUN()时,unique_ptr超出了范围。由于我创建了类级别unique_ptr,因此默认情况下范围应该是类。

假设unique_ptr的范围是main2(),即使那时main2还没有完全退出,因此不应该调用unique_ptr的析构函数! 这就是我的困惑!

注意:使用g ++ 4.8编译器(这是Ubuntu repo中的最新版本)所以必须给出&#34; c ++ 1y&#34; STD

1 个答案:

答案 0 :(得分:1)

行后

un u;
temp = std::unique_ptr<un>(&u);

tempunique_ptr,指向&u。函数返回后,temp下的指针是一个悬空指针。

使用

un u;
temp = std::make_unique<un>(u);

代替。