Ошибка сегментации при вызове PQfinish внутри шаблона синглетона - PullRequest
2 голосов
/ 26 июня 2019

Я создаю синглетный класс и хочу добавить внутрь объекта PGconn.

Этот класс в прошлом обеспечивал соединения с БД.

// postgresql
#include <libpq-fe.h>
//==============================================================================
class TestST
{
public:
  static TestST& getInstance()
  {
    static TestST test;
    return test;
  }
  bool createConnection()
  {
    mConn.reset( PQsetdbLogin("localhost", "5432", NULL, NULL,
                             "test_db", "user_app",
                             "passwd"),
                 &PQfinish); // [SIGSEGV when delete] passing a reference to the destroy function
    return true;
  }

private:
  TestST()
  {

  }
private:
  std::shared_ptr<PGconn> mConn; // smart pointer to postgres connetion object
};

//==============================================================================
int main(int argc, char** argv)
{
  TestST::getInstance().createConnection(); // create singletone and connection

  return 0;
}
//==============================================================================

Когда синглетон удален, функция PQfinish вызывает сигнал Сегментация сбой. Если я перенес инициализацию mConn в конструктор - это работа. Если я собираю и запускаю на Windows (MSVC) - это работает.

postgres версия 9.6.9; ОС - Debian 9; gcc версия 6.3.0

...