diff --git a/mex/sources/k_order_perturbation/dynamic_abstract_class.hh b/mex/sources/k_order_perturbation/dynamic_abstract_class.hh index 8c84dbe01377d73fb14bbba4afda04723925e4c7..0c5f63af6480bde21e421f5437b177330975cbd6 100644 --- a/mex/sources/k_order_perturbation/dynamic_abstract_class.hh +++ b/mex/sources/k_order_perturbation/dynamic_abstract_class.hh @@ -25,9 +25,10 @@ class DynamicModelAC { public: + virtual ~DynamicModelAC() = default; static double *unpackSparseMatrix(mxArray *sparseMatrix); static void copyDoubleIntoTwoDMatData(double *dm, TwoDMatrix *tdm, int rows, int cols); virtual void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady, - Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException) = 0; + Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false) = 0; }; #endif diff --git a/mex/sources/k_order_perturbation/dynamic_dll.cc b/mex/sources/k_order_perturbation/dynamic_dll.cc index a352d5e0360bd940e2ef8012f1fe5f27f1a37176..762702e1bbc0d2a1191a01a2fa6c234ba2340b1d 100644 --- a/mex/sources/k_order_perturbation/dynamic_dll.cc +++ b/mex/sources/k_order_perturbation/dynamic_dll.cc @@ -21,7 +21,7 @@ #include <sstream> -DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException) +DynamicModelDLL::DynamicModelDLL(const string &modName) noexcept(false) { string fName; #if !defined(__CYGWIN32__) && !defined(_WIN32) @@ -33,7 +33,7 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException) { #if defined(__CYGWIN32__) || defined(_WIN32) dynamicHinstance = LoadLibrary(fName.c_str()); - if (dynamicHinstance == NULL) + if (dynamicHinstance == nullptr) throw 1; ntt = (int *) GetProcAddress(dynamicHinstance, "ntt"); dynamic_resid_tt = (dynamic_tt_fct) GetProcAddress(dynamicHinstance, "dynamic_resid_tt"); @@ -44,18 +44,18 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException) dynamic_g2 = (dynamic_g2_fct) GetProcAddress(dynamicHinstance, "dynamic_g2"); dynamic_g3_tt = (dynamic_tt_fct) GetProcAddress(dynamicHinstance, "dynamic_g3_tt"); dynamic_g3 = (dynamic_g3_fct) GetProcAddress(dynamicHinstance, "dynamic_g3"); - if (ntt == NULL - || dynamic_resid_tt == NULL || dynamic_resid == NULL - || dynamic_g1_tt == NULL || dynamic_g1 == NULL - || dynamic_g2_tt == NULL || dynamic_g2 == NULL - || dynamic_g3_tt == NULL || dynamic_g3 == NULL) + if (ntt == nullptr + || dynamic_resid_tt == nullptr || dynamic_resid == nullptr + || dynamic_g1_tt == nullptr || dynamic_g1 == nullptr + || dynamic_g2_tt == nullptr || dynamic_g2 == nullptr + || dynamic_g3_tt == nullptr || dynamic_g3 == nullptr) { FreeLibrary(dynamicHinstance); // Free the library throw 2; } #else // Linux or Mac dynamicHinstance = dlopen(fName.c_str(), RTLD_NOW); - if (dynamicHinstance == NULL) + if (dynamicHinstance == nullptr) { cerr << dlerror() << endl; throw 1; @@ -69,11 +69,11 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException) dynamic_g2 = (dynamic_g2_fct) dlsym(dynamicHinstance, "dynamic_g2"); dynamic_g3_tt = (dynamic_tt_fct) dlsym(dynamicHinstance, "dynamic_g3_tt"); dynamic_g3 = (dynamic_g3_fct) dlsym(dynamicHinstance, "dynamic_g3"); - if (ntt == NULL - || dynamic_resid_tt == NULL || dynamic_resid == NULL - || dynamic_g1_tt == NULL || dynamic_g1 == NULL - || dynamic_g2_tt == NULL || dynamic_g2 == NULL - || dynamic_g3_tt == NULL || dynamic_g3 == NULL) + if (ntt == nullptr + || dynamic_resid_tt == nullptr || dynamic_resid == nullptr + || dynamic_g1_tt == nullptr || dynamic_g1 == nullptr + || dynamic_g2_tt == nullptr || dynamic_g2 == nullptr + || dynamic_g3_tt == nullptr || dynamic_g3 == nullptr) { dlclose(dynamicHinstance); // Free the library cerr << dlerror() << endl; @@ -95,16 +95,19 @@ DynamicModelDLL::DynamicModelDLL(const string &modName) throw (DynareException) } catch (...) { - throw DynareException(__FILE__, __LINE__, string("Can't find the relevant dynamic symbols in ") + fName); + throw DynareException(__FILE__, __LINE__, "Can't find the relevant dynamic symbols in " + fName); } } DynamicModelDLL::~DynamicModelDLL() { #if defined(__CYGWIN32__) || defined(_WIN32) - bool result = FreeLibrary(dynamicHinstance); + auto result = FreeLibrary(dynamicHinstance); if (result == 0) - throw DynareException(__FILE__, __LINE__, string("Can't free the *_dynamic DLL")); + { + cerr << "Can't free the *_dynamic DLL" << endl; + exit(EXIT_FAILURE); + } #else dlclose(dynamicHinstance); #endif @@ -112,7 +115,7 @@ DynamicModelDLL::~DynamicModelDLL() void DynamicModelDLL::eval(const Vector &y, const Vector &x, const Vector &modParams, const Vector &ySteady, - Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException) + Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false) { double *T = (double *) malloc(sizeof(double) * (*ntt)); dynamic_resid_tt(y.base(), x.base(), 1, modParams.base(), ySteady.base(), 0, T); diff --git a/mex/sources/k_order_perturbation/dynamic_dll.hh b/mex/sources/k_order_perturbation/dynamic_dll.hh index de2696508baa1beb1aebe6f92cab87f80f02f50e..aef34c8872a2a99f25d9fa91092955833565b495 100644 --- a/mex/sources/k_order_perturbation/dynamic_dll.hh +++ b/mex/sources/k_order_perturbation/dynamic_dll.hh @@ -34,11 +34,11 @@ #include "dynamic_abstract_class.hh" #include "dynare_exception.h" -typedef void (*dynamic_tt_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, double *T); -typedef void (*dynamic_resid_fct) (const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *residual); -typedef void (*dynamic_g1_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *g1); -typedef void (*dynamic_g2_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v2); -typedef void (*dynamic_g3_fct)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v3); +using dynamic_tt_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, double *T); +using dynamic_resid_fct = void (*) (const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *residual); +using dynamic_g1_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *g1); +using dynamic_g2_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v2); +using dynamic_g3_fct = void (*)(const double *y, const double *x, int nb_row_x, const double *params, const double *steady_state, int it_, const double *T, double *v3); /** * creates pointer to Dynamic function inside <model>_dynamic.dll @@ -61,11 +61,10 @@ private: public: // construct and load Dynamic model DLL - DynamicModelDLL(const string &fname) throw (DynareException); - virtual - ~DynamicModelDLL(); + explicit DynamicModelDLL(const string &fname) noexcept(false); + virtual ~DynamicModelDLL(); void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady, - Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException); + Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false); }; #endif diff --git a/mex/sources/k_order_perturbation/dynamic_m.cc b/mex/sources/k_order_perturbation/dynamic_m.cc index 7fe252cfdb6ed2b9d575b13ab2050871cdfb27d9..0904dd4ae7d03b5dc58ec70f75cd2bb44a449e3c 100644 --- a/mex/sources/k_order_perturbation/dynamic_m.cc +++ b/mex/sources/k_order_perturbation/dynamic_m.cc @@ -19,18 +19,14 @@ #include "dynamic_m.hh" -DynamicModelMFile::DynamicModelMFile(const string &modName) throw (DynareException) : - DynamicMFilename(modName + ".dynamic") -{ -} - -DynamicModelMFile::~DynamicModelMFile() +DynamicModelMFile::DynamicModelMFile(const string &modName) noexcept(false) : + DynamicMFilename{modName + ".dynamic"} { } void DynamicModelMFile::eval(const Vector &y, const Vector &x, const Vector &modParams, const Vector &ySteady, - Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException) + Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false) { mxArray *prhs[nrhs_dynamic], *plhs[nlhs_dynamic]; @@ -51,9 +47,9 @@ DynamicModelMFile::eval(const Vector &y, const Vector &x, const Vector &modParam residual = Vector(mxGetPr(plhs[0]), residual.skip(), (int) mxGetM(plhs[0])); copyDoubleIntoTwoDMatData(mxGetPr(plhs[1]), g1, (int) mxGetM(plhs[1]), (int) mxGetN(plhs[1])); - if (g2 != NULL) + if (g2 != nullptr) copyDoubleIntoTwoDMatData(unpackSparseMatrix(plhs[2]), g2, (int) mxGetNzmax(plhs[2]), 3); - if (g3 != NULL) + if (g3 != nullptr) copyDoubleIntoTwoDMatData(unpackSparseMatrix(plhs[3]), g3, (int) mxGetNzmax(plhs[3]), 3); for (int i = 0; i < nrhs_dynamic; i++) diff --git a/mex/sources/k_order_perturbation/dynamic_m.hh b/mex/sources/k_order_perturbation/dynamic_m.hh index 260d07ef80c182583c800a011c485d1273eaa79d..a0b890d1243c114d9ad0467296450a1501164ffd 100644 --- a/mex/sources/k_order_perturbation/dynamic_m.hh +++ b/mex/sources/k_order_perturbation/dynamic_m.hh @@ -36,10 +36,9 @@ private: const static int nlhs_dynamic = 4; const static int nrhs_dynamic = 5; public: - DynamicModelMFile(const string &modName) throw (DynareException); - virtual - ~DynamicModelMFile(); + explicit DynamicModelMFile(const string &modName) noexcept(false); + virtual ~DynamicModelMFile() = default; void eval(const Vector &y, const Vector &x, const Vector ¶ms, const Vector &ySteady, - Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) throw (DynareException); + Vector &residual, TwoDMatrix *g1, TwoDMatrix *g2, TwoDMatrix *g3) noexcept(false); }; #endif diff --git a/mex/sources/k_order_perturbation/k_ord_dynare.cc b/mex/sources/k_order_perturbation/k_ord_dynare.cc index 7602b550d2308c32e927b706b8c8359bc1e51d33..fe899c4694b951166e9509af82fbe7f5171f8964 100644 --- a/mex/sources/k_order_perturbation/k_ord_dynare.cc +++ b/mex/sources/k_order_perturbation/k_ord_dynare.cc @@ -40,14 +40,14 @@ KordpDynare::KordpDynare(const vector<string> &endo, int num_endo, Vector &ysteady, TwoDMatrix &vcov, Vector &inParams, int nstat, int npred, int nforw, int nboth, const int jcols, const Vector &nnzd, const int nsteps, int norder, - Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol, - const vector<int> &var_order, const TwoDMatrix &llincidence, double criterium) throw (TLException) : - nStat(nstat), nBoth(nboth), nPred(npred), nForw(nforw), nExog(nexog), nPar(npar), - nYs(npred + nboth), nYss(nboth + nforw), nY(num_endo), nJcols(jcols), NNZD(nnzd), nSteps(nsteps), - nOrder(norder), journal(jr), ySteady(ysteady), params(inParams), vCov(vcov), - md(1), dnl(*this, endo), denl(*this, exo), dsnl(*this, dnl, denl), ss_tol(sstol), varOrder(var_order), - ll_Incidence(llincidence), qz_criterium(criterium), g1p(NULL), - g2p(NULL), g3p(NULL), dynamicModelFile(dynamicModelFile_arg) + Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol, + const vector<int> &var_order, const TwoDMatrix &llincidence, double criterium) noexcept(false) : + nStat{nstat}, nBoth{nboth}, nPred{npred}, nForw{nforw}, nExog{nexog}, nPar{npar}, + nYs{npred + nboth}, nYss{nboth + nforw}, nY{num_endo}, nJcols{jcols}, NNZD{nnzd}, nSteps{nsteps}, + nOrder{norder}, journal{jr}, ySteady{ysteady}, params{inParams}, vCov{vcov}, + md{1}, dnl{*this, endo}, denl{*this, exo}, dsnl{*this, dnl, denl}, ss_tol{sstol}, varOrder{var_order}, + ll_Incidence{llincidence}, qz_criterium{criterium}, g1p{nullptr}, + g2p{nullptr}, g3p{nullptr}, dynamicModelFile{move(dynamicModelFile_arg)} { ReorderDynareJacobianIndices(); @@ -61,15 +61,15 @@ KordpDynare::KordpDynare(const vector<string> &endo, int num_endo, Vector &ysteady, TwoDMatrix &vcov, Vector &inParams, int nstat, int npred, int nforw, int nboth, const int jcols, const Vector &nnzd, const int nsteps, int norder, - Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol, + Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol, const vector<int> &var_order, const TwoDMatrix &llincidence, double criterium, - TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) throw (TLException) : - nStat(nstat), nBoth(nboth), nPred(npred), nForw(nforw), nExog(nexog), nPar(npar), - nYs(npred + nboth), nYss(nboth + nforw), nY(num_endo), nJcols(jcols), NNZD(nnzd), nSteps(nsteps), - nOrder(norder), journal(jr), ySteady(ysteady), params(inParams), vCov(vcov), - md(1), dnl(*this, endo), denl(*this, exo), dsnl(*this, dnl, denl), ss_tol(sstol), varOrder(var_order), - ll_Incidence(llincidence), qz_criterium(criterium), - g1p(g1_arg), g2p(g2_arg), g3p(g3_arg), dynamicModelFile(dynamicModelFile_arg) + TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) noexcept(false) : + nStat{nstat}, nBoth{nboth}, nPred{npred}, nForw{nforw}, nExog{nexog}, nPar{npar}, + nYs{npred + nboth}, nYss{nboth + nforw}, nY{num_endo}, nJcols{jcols}, NNZD{nnzd}, nSteps{nsteps}, + nOrder{norder}, journal{jr}, ySteady{ysteady}, params{inParams}, vCov{vcov}, + md{1}, dnl{*this, endo}, denl{*this, exo}, dsnl{*this, dnl, denl}, ss_tol{sstol}, varOrder{var_order}, + ll_Incidence{llincidence}, qz_criterium{criterium}, + g1p{g1_arg}, g2p{g2_arg}, g3p{g3_arg}, dynamicModelFile{move(dynamicModelFile_arg)} { ReorderDynareJacobianIndices(); @@ -91,7 +91,7 @@ KordpDynare::solveDeterministicSteady() } void -KordpDynare::evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) throw (DynareException) +KordpDynare::evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) noexcept(false) { // This method is only called when checking the residuals at steady state (Approximation::check), so return zero residuals out.zeros(); @@ -99,7 +99,7 @@ KordpDynare::evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) thr void KordpDynare::evaluateSystem(Vector &out, const Vector &yym, const Vector &yy, - const Vector &yyp, const Vector &xx) throw (DynareException) + const Vector &yyp, const Vector &xx) noexcept(false) { // This method is only called when checking the residuals at steady state (Approximation::check), so return zero residuals out.zeros(); @@ -112,7 +112,7 @@ KordpDynare::evaluateSystem(Vector &out, const Vector &yym, const Vector &yy, void KordpDynare::calcDerivativesAtSteady() { - if (g1p == NULL) + if (g1p == nullptr) { g1p = new TwoDMatrix(nY, nJcols); g1p->zeros(); @@ -166,7 +166,7 @@ KordpDynare::populateDerivativesContainer(const TwoDMatrix &g, int ord, const ve // model derivatives FSSparseTensor instance FSSparseTensor *mdTi = (new FSSparseTensor(ord, nJcols, nY)); - IntSequence s(ord, 0); + IntSequence s{ord, 0}; if (ord == 1) { @@ -261,7 +261,7 @@ KordpDynare::populateDerivativesContainer(const TwoDMatrix &g, int ord, const ve * passing to <model>_dynamic DLL *************************************************************/ void -KordpDynare::LLxSteady(const Vector &yS, Vector &llxSteady) throw (DynareException, TLException) +KordpDynare::LLxSteady(const Vector &yS, Vector &llxSteady) noexcept(false) { if ((nJcols-nExog) == yS.length()) throw DynareException(__FILE__, __LINE__, "ySteady already of right size"); @@ -308,7 +308,7 @@ KordpDynare::LLxSteady(const Vector &yS, Vector &llxSteady) throw (DynareExcepti ************************************/ void -KordpDynare::ReorderDynareJacobianIndices() throw (TLException) +KordpDynare::ReorderDynareJacobianIndices() noexcept(false) { // create temporary square 2D matrix size nEndo x nEndo (sparse) // for the lag, current and lead blocks of the jacobian @@ -351,7 +351,7 @@ DynareStateNameList::DynareStateNameList(const KordpDynare &dynare, const Dynare const DynareNameList &denl) { for (int i = 0; i < dynare.nys(); i++) - names.push_back(string(dnl.getName(i+dynare.nstat()))); + names.push_back(string{dnl.getName(i+dynare.nstat())}); for (int i = 0; i < dynare.nexog(); i++) - names.push_back(string(denl.getName(i))); + names.push_back(string{denl.getName(i)}); } diff --git a/mex/sources/k_order_perturbation/k_ord_dynare.hh b/mex/sources/k_order_perturbation/k_ord_dynare.hh index b5d942f6b9c92e624e3aa560d4d9a4b73c4d20b3..167b6a41de88cfe52c521d460d7299a7456d98f0 100644 --- a/mex/sources/k_order_perturbation/k_ord_dynare.hh +++ b/mex/sources/k_order_perturbation/k_ord_dynare.hh @@ -20,6 +20,7 @@ #ifndef K_ORD_DYNARE3_H #define K_ORD_DYNARE3_H #include <vector> +#include <memory> #include "t_container.h" #include "sparse_tensor.h" #include "decision_rule.h" @@ -123,20 +124,19 @@ public: Vector &ySteady, TwoDMatrix &vCov, Vector ¶ms, int nstat, int nPred, int nforw, int nboth, const int nJcols, const Vector &NNZD, const int nSteps, const int ord, - Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol, + Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol, const vector<int> &varOrder, const TwoDMatrix &ll_Incidence, - double qz_criterium) throw (TLException); + double qz_criterium) noexcept(false); KordpDynare(const vector<string> &endo, int num_endo, const vector<string> &exo, int num_exo, int num_par, Vector &ySteady, TwoDMatrix &vCov, Vector ¶ms, int nstat, int nPred, int nforw, int nboth, const int nJcols, const Vector &NNZD, const int nSteps, const int ord, - Journal &jr, DynamicModelAC *dynamicModelFile_arg, double sstol, + Journal &jr, unique_ptr<DynamicModelAC> dynamicModelFile_arg, double sstol, const vector<int> &varOrder, const TwoDMatrix &ll_Incidence, - double qz_criterium, TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) throw (TLException); + double qz_criterium, TwoDMatrix *g1_arg, TwoDMatrix *g2_arg, TwoDMatrix *g3_arg) noexcept(false); - virtual - ~KordpDynare(); + virtual ~KordpDynare(); int nstat() const { @@ -230,21 +230,21 @@ public: } void solveDeterministicSteady(); - void evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) throw (DynareException); + void evaluateSystem(Vector &out, const Vector &yy, const Vector &xx) noexcept(false); void evaluateSystem(Vector &out, const Vector &yym, const Vector &yy, - const Vector &yyp, const Vector &xx) throw (DynareException); + const Vector &yyp, const Vector &xx) noexcept(false); void calcDerivativesAtSteady(); - DynamicModelAC *dynamicModelFile; + unique_ptr<DynamicModelAC> dynamicModelFile; DynamicModel * clone() const { std::cerr << "KordpDynare::clone() not implemented" << std::endl; exit(EXIT_FAILURE); } - void LLxSteady(const Vector &yS, Vector &llxSteady) throw (DynareException, TLException); // Given the steady state in yS, returns in llxSteady the steady state extended with leads and lags + void LLxSteady(const Vector &yS, Vector &llxSteady) noexcept(false); // Given the steady state in yS, returns in llxSteady the steady state extended with leads and lags private: - void ReorderDynareJacobianIndices() throw (TLException); + void ReorderDynareJacobianIndices() noexcept(false); void populateDerivativesContainer(const TwoDMatrix &g, int ord, const vector<int> &vOrder); }; diff --git a/mex/sources/k_order_perturbation/k_order_perturbation.cc b/mex/sources/k_order_perturbation/k_order_perturbation.cc index 1e6a88cc0da566aa02235066c7ccda0e40ebe14a..79a921a672fe80b3de5c9842e1f5ebb2fbf515a0 100644 --- a/mex/sources/k_order_perturbation/k_order_perturbation.cc +++ b/mex/sources/k_order_perturbation/k_order_perturbation.cc @@ -198,9 +198,9 @@ extern "C" { if ((nEndo != nendo) || (nExog != nexo)) DYN_MEX_FUNC_ERR_MSG_TXT("Incorrect number of input parameters."); - TwoDMatrix *g1m = NULL; - TwoDMatrix *g2m = NULL; - TwoDMatrix *g3m = NULL; + TwoDMatrix *g1m = nullptr; + TwoDMatrix *g2m = nullptr; + TwoDMatrix *g3m = nullptr; // derivatives passed as arguments */ if (nrhs > 3) { @@ -236,11 +236,11 @@ extern "C" { jName += ".jnl"; Journal journal(jName.c_str()); - DynamicModelAC *dynamicModelFile; + unique_ptr<DynamicModelAC> dynamicModelFile; if (use_dll == 1) - dynamicModelFile = new DynamicModelDLL(fName); + dynamicModelFile = make_unique<DynamicModelDLL>(fName); else - dynamicModelFile = new DynamicModelMFile(fName); + dynamicModelFile = make_unique<DynamicModelMFile>(fName); // intiate tensor library tls.init(kOrder, nStat+2*nPred+3*nBoth+2*nForw+nExog); @@ -248,7 +248,7 @@ extern "C" { // make KordpDynare object KordpDynare dynare(endoNames, nEndo, exoNames, nExog, nPar, ySteady, vCov, modParams, nStat, nPred, nForw, nBoth, - jcols, NNZD, nSteps, kOrder, journal, dynamicModelFile, + jcols, NNZD, nSteps, kOrder, journal, move(dynamicModelFile), sstol, var_order_vp, llincidence, qz_criterium, g1m, g2m, g3m);