gpt4 book ai didi

用于处理 a = b + c 而无需显式复制 "a.data_ptr"中的数据的 C++ 运算符语法

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:25 26 4
gpt4 key购买 nike

我想进一步穷尽这个话题。

假设我有类似的东西:

class MyClass
{
public:

MyClass(int N)
{
data_ptr = new float[N];
};

float* dat_ptr;

// ... clever operator definition here ...
};

所以我希望能够简单地写:

MyClass a(4);
MyClass b(4);
MyClass c(4);

// modify b.data_ptr and c.data_ptr ....
// Use "clever operator"
a = b + c;

对于 i=0:(N-1) ...

因此不会创建额外的数据拷贝,我们可以很好地使用预分配的缓冲区。

这可能吗?如果是这样,请向我提供有关如何完成的一些见解。

谢谢!

最佳答案

如果您使用 C++11 中的移动语义,就可以。

class MyClass
{
public:

MyClass(int N)
{
data_ptr = new float[N];
n = N;
}

MyClass(MyClass && rhs)
{
data_ptr = rhs.data_ptr;
n = rhs.n;

rhs.data_ptr = nullptr;
}

// dtor, copy-ctor etc.

int n;
float * dat_ptr;
};

MyClass operator + (const MyClass & left, const MyClass & right)
{
MyClass result(left.n);

// Implement addition
}

// Note: no error-checking

这样一个临时对象被创建,但内部数据不会被不必要地复制。

阅读more关于移动语义。

关于用于处理 a = b + c 而无需显式复制 "a.data_ptr"中的数据的 C++ 运算符语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16810071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com