静态shared_ptr

时间:2016-09-30 00:46:04

标签: c++ static shared-ptr

所以我不知道究竟发生了什么,但不知何故,它与访问静态shared_ptr有关。我正在使用spdlog库。在我的头文件中,我有以下内容:

/** This is the main logger sink used by Metadiff */
        static const std::shared_ptr<spdlog::sinks::dist_sink_st> md_sink(new spdlog::sinks::dist_sink_st());

        /** Creates a new logger linked to md_sink */
        std::shared_ptr<spdlog::logger> logger(std::string name);
//    {
//            std::shared_ptr<spdlog::logger> ptr = spdlog::get(name);
//            if (not ptr) {
//                ptr = std::make_shared<spdlog::logger>(name, md_sink);
//                spdlog::register_logger(ptr);
//                ptr->set_level(spdlog::level::trace);
//                ptr->set_pattern("[%H:%M:%S][%l][%n] %v");
//            }
//            return ptr;
//        }

在相应的cpp文件中:

std::shared_ptr<spdlog::logger> logger(std::string name)  {
            std::shared_ptr<spdlog::logger> ptr = spdlog::get(name);
            if (not ptr) {
                ptr = std::make_shared<spdlog::logger>(name, md::utils::md_sink);
                spdlog::register_logger(ptr);
                ptr->set_level(spdlog::level::trace);
                ptr->set_pattern("[%H:%M:%S][%l][%n] %v");
            }
            return ptr;
        }

现在,当我尝试运行我的代码时,由于某种原因这不起作用,我不明白为什么(例如,当我尝试记录消息时,我没有得到任何东西)。如果我从cpp文件中删除实现并将其放在头文件中(并使其内联),它就会神奇地起作用。

请有人解释我的错误。

0 个答案:

没有答案