gpt4 book ai didi

c++ - 使用指针或引用返回 Boost 矩阵有优势吗?

转载 作者:行者123 更新时间:2023-11-28 00:53:15 25 4
gpt4 key购买 nike

我正在使用 Boost 来做一些矩阵代数。我试图了解此优化是否有任何作用。原文:

matrix<double> DoSomething(matrix<double> a, matrix<double> b)
{
return a + b; //for example
}

优化:

matrix<double>* DoSomething(matrix<double>* a, matrix<double>* b)
{
return *a + *b; //for example
}

基本上,我假设使用指针作为参数和返回类型会阻止复制大对象。阅读完源代码后,我想知道 Boost ublas 是否基本上解决了这个问题。看起来您总是在处理 Boost 代码中的引用。

最佳答案

这不是优化。事实上,这是一场灾难。您的“优化”代码返回一个指向函数返回时不再存在的临时对象的指针。如果您尝试解决此问题:

matrix<double>* DoSomething(matrix<double>* a, matrix<double>* b)
{
return new Matrix<double>(*a + *b); //for example
}

好吧,看看你刚刚在那里做了什么。您刚刚要求创建一个拷贝,因为您的新矩阵是从对 ab 求和所得的临时矩阵复制构造的。更糟糕的是,这段代码现在不再是异常安全的,并且很容易在调用者中搞砸并且不释放分配的矩阵。

所以别管它了。它已经过优化,您可以轻松破坏它或使其变得更糟。

关于c++ - 使用指针或引用返回 Boost 矩阵有优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877747/

25 4 0