例如,有一些类:
class CSomeClass
{
double GetLengthLine(std::shared_ptr<CPoint> firstVertex, std::shared_ptr<CPoint> secondVertex) const;
}
double CTriangle::GetLengthLine(std::shared_ptr<CPoint> firstVertex, std::shared_ptr<CPoint> secondVertex) const
{
....
return std::hypot(dx, dy);
};
将智能指针传递给函数时会复制值,还是会传递引用?
由于函数的参数采用
std::shared_ptr<CPoint>按值类型的对象,因此调用它们的参数的副本将传递给函数。也就是说,相应的参数将被移动或复制到函数参数中,因为该类std::shared_ptr同时具有复制构造函数和移动构造函数。但是对包裹在
std::shared_ptr. 也就是说,当调用函数时,对原始“原始”指针的引用计数器将发生变化。考虑以下演示程序。
它的控制台输出如下
如果我正确理解了这个问题(尽管对此有疑问,因为已经有一个公认的答案),那么我们仍在谈论复制 type 的对象
CPoint,它是 parameterizedstd::shared_ptr。在这种情况下,智能指针对象如何通过引用或值传递根本无关紧要——这不会导致存储在指针中的对象的额外副本。例子:结论:
那些。只创建了一个对象。没有复制或移动发生。这在原则上是合乎逻辑的,因为。同样,当传递常规(非智能)指针时,不会创建(有用的)对象。
通常,
sizeof(int)如果不应该修改任何足够大(多于几个)的对象,则通过常量引用传递它是有意义的。