【发布时间】:2016-05-04 02:35:42
【问题描述】:
我知道在一般情况下按值传递、引用或指针传递之间的区别。但是,我的问题是关于结构简单的容器的特殊情况。
假设这种情况:
class image{
image()=default;
image(image const&)=default;
~image()=default;
int w;
int h;
uchar* data;
}
当传递此类的对象时,复制的只是两个整数和指针,而不是整个数据。在这种情况下,是否有目的通过引用传递它?还是有目的不通过引用传递它?
引发这个问题的原因是我读到 C++ 中的 iterators 被设计为轻量级并按值传递。所以,我认为这个概念可以应用于将容器表示为实际数据而不是数据的类。
【问题讨论】:
-
uchar* data是什么?我的意思是它是深度复制和清理的资源吗? -
复制(非克隆)时,只复制指针,两个对象共享相同的实际数据
-
默认析构函数不会删除
data,因此显然指针指向某个外部(指向类)资源。复制这样的指针是可以的。也许w和h指的是指向数据的某个特定部分,类似于string_view? -
如果该类只是对其他地方管理的内存的视图,您可能应该将其称为“imageView”,以表明它仅表示图像数据的视图,而不是表示图像数据本身。
标签: c++ c++11 pass-by-reference pass-by-value