c++ - 为什么这个 shared_ptr 代码会出现段错误? shared_ptr 什么时候免费?

标签 c++ scope shared-ptr

我已尽我所能制作了 SSCE。我怀疑共享指针在我在 main 中请求它们之前解构(释放)了我的对象。如何在不完全绕过共享指针的情况下防止这种情况发生?这是一个程序中的孤立问题,否则可以通过使用 shared_ptr 得到很大帮助。

测试.h:

#ifndef TEST_H
#define TEST_H
#include <memory>
#include <iostream>
#include <vector>

class Test
{
    public:
        Test();
        virtual ~Test();
        static std::shared_ptr<Test> makeTestFrom(std::string l);
        std::vector<std::shared_ptr<int>> reg_vec;
    protected:
    private:

};

#endif // TEST_H

测试.cpp

#include <memory>
#include <iostream>
#include <vector>
Test::Test():
reg_vec()
{
    //ctor
}

Test::~Test()
{
    //dtor
}
std::shared_ptr<Test> Test::makeTestFrom(std::string l)
{
    std::shared_ptr<Test> sp(new Test());
    std::shared_ptr<int> i(new int(3));
    sp->reg_vec.push_back(i);
    return sp;
}

主要.cpp:

#include <memory>
#include <iostream>
#include <vector>
#include "include/Test.h"
using namespace std;

 int main()
{
    std::unique_ptr<Test> x(new Test());
    x->makeTestFrom("loldoesntmatter");
    std::cout << x->reg_vec[0] << std::endl;
    return 0;

}

最佳答案

 int main() {
    std::unique_ptr<Test> x(new Test());
    x->makeTestFrom("loldoesntmatter"); // you discarded the return
    std::cout << x->reg_vec[0] << std::endl; // x->reg_vec is empty
    return 0;

}

另外,共享指针过多

关于c++ - 为什么这个 shared_ptr 代码会出现段错误? shared_ptr 什么时候免费?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12613190/

相关文章:

c++ - 在内存中复制字节时,字节顺序是否有影响?

c++ - 计算相邻盒子的数量

python - 如何从函数中更改全局变量?

C-声明为静态的函数的链接

c++ - 将std::shared_ptr <T>传递给采用std::shared_ptr <const T>的函数?

c++ - 在 header 、内联函数和代码中分离 C++ 代码时出现问题

C++ 代码断行,看在我的份上,我无法修复它

javascript - 在类中初始化自定义 ko.computed

c++ - 如何使 const 应用于作为共享指针的 C++ 类成员

c++ - 默认模板函数参数中的 boost::shared_ptr 和 nullptr