如何调用模板类的析构函数?

Tar*_*rek 1 c++ destructor class eigen

我正在使用库Eigen的SparseMatrix类.要创建一个,我使用:

typedef Eigen::SparseMatrix<float>  matrix;
matrix M (10,10);
Run Code Online (Sandbox Code Playgroud)

如何调用此对象的析构函数?

Sin*_*all 9

你不需要.您的对象正在堆栈上创建,并在超出范围时自动删除.

  • 除此之外,如果你将`矩阵'变量声明放在循环中,每次循环块存在时它都会被销毁,这将在每次循环重复时发生.因此,您想要的最小内存使用量将在那里. (2认同)

R. *_*des 7

(...)因为我需要在循环中多次重新初始化相同的稀疏矩阵.我希望每次通过析构函数破坏矩阵都会导致最小的内存泄漏.

清晰,明显,最安全,也可能是最有效的解决方案是使用普通的 C++语义."重新初始化"是通过分配完成的.

typedef Eigen::SparseMatrix<float>  matrix;
matrix M (10,10);
M = matrix(12, 12);
Run Code Online (Sandbox Code Playgroud)

在循环体内声明矩阵,它将在每次循环迭代时被正确初始化和销毁​​.

哦,假设一个非错误的库,在所有这些情况下都没有内存泄漏.只是不要乱扔东西new,不要玩火(就像直接调用析构函数).

  • 如果赋值不是最有效的,那么像`matrix(12,12).swap(M);`这样的东西在C++ 03中会更好(或者在C++ 11中,对于一个不移动的类来说 - 启用了).你必须检查课程的文档.由于它是一个*稀疏*矩阵,你希望"空"矩阵的创建和破坏非常快,因此"M =矩阵(12,12);"的开销很小. (2认同)