【发布时间】:2019-04-09 00:15:12
【问题描述】:
我希望通过引用将我的数据传递给一个类,其中引用本身应该是公共变量,以供成员函数访问。如果我声明我的类及其构造函数
class max_likelihood {
public:
MatrixXd dat
max_likelihood(const Ref<const MatrixXd>& dat_in)
{dat = dat_in;}
我得到了正常运行的代码,但最终创建了dat 的副本,我想避免这种情况。
我尝试过这样做:
class max_likelihood {
public:
const Ref<const MatrixXd>& dat;
max_likelihood(const Ref<const MatrixXd>& dat){}
但这不起作用和/或不允许我访问对dat 的引用,甚至无法编译。
根据我的研究,我从question 中找到了这一点
如果你想重新分配一个 Ref 来引用另一个缓冲区,那么使用一个placement new 来重新调用 Ref 的构造函数。不要忘记先调用析构函数。
我相信这可能有助于回答我的问题,但我不知道这些说明在实践中意味着什么,因此我的问题在这里。具体来说,我想我正在创建一个 Ref 对象的新实例来传递传递的引用。当源数据在别处创建时,例如通过 main 从文件中读取,我如何解释这个答案或找到更优雅的方式在类中使用 Ref 对象?
【问题讨论】:
-
您是否考虑过更改
max_likelihood以按值获取参数或添加通过右值引用获取参数的重载?在不需要的情况下,您可以避免复制。 -
使用placement new 不会为您保存副本。链接的问题是朝着错误的方向发展。
-
请分享minimal reproducible example 以更好地说明用例。
-
不要把事情复杂化,使用移动语义
-
@FrançoisAndrieux Ref 是由库 Eigen eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html 提供的类
标签: c++ memory-management reference eigen