c++ - 我应该通过传递冗余参数来避免隐式行为吗?

标签 c++ api

我正在开发一个类,除其他外,该类将创建一个内存块并对该内存执行一些处理。用户将执行如下操作:

MyClass m;
float* data = m.createData();
/* user writes to `data` ... */
m.processData();

请记住,createData() 只会被调用一次,MyClass 保留一个指向data 的内部指针,所有 processData() 调用将始终作用于此数据。

我的问题是关于 processData() 方法的签名。我对 processData() 隐式修改 data 这一事实感到有点不自在。我是否应该要求将 data 作为参数传递(即使是多余的)只是为了让用户明确了解此行为?

MyClass m;
float* data = m.createData();
/* user writes to `data` ... */
m.processData(data);

最佳答案

I'm a bit uncomfortable with the fact that processData() implicitly modifies data.

实际上,processData不修改 data根本。根据您的描述,它修改了 data 的对象指着。但只是因为内部指针恰好指向同一个对象。

Should I require data to be passed as a parameter (even being redundant) just to make this behavior explicit to the user?

如果您无论如何都打算使用内部指针,那么绝对不要。要求用户传递未使用的参数会非常困惑。

如果您打算改用传递的指针,那么将指针存储在类中就没有多大意义。

user needs to access this data (write and read).

面向对象的做法是不返回指向数据的指针,而是将成员函数写入MyClass执行写作和阅读。

非面向对象的方法也可以:替换 createDataprocessData使用免费功能,返回 std::unque_ptr<float[]> (或者更好的是,使用 std::vector )数据,并摆脱 MyClass完全。

关于c++ - 我应该通过传递冗余参数来避免隐式行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458482/

相关文章:

c++ - 指向成员函数的指针

c++ - 为什么 fstream 不能在 Linux 中写入文件?

wcf - 如何将 bool 参数传递给一个安静的服务?

c++ - 为什么我的析构函数被调用,我该如何修复它

c++ - OpenGL 3.x/4x 中的纹素/像素匹配

html - 如何在Web音频上下文中更改源

ruby-on-rails-3 - 用于在社交媒体网站上一键分享内容的 rails 3 gem

ios - Swift - 使用来自 API 的数据填充 UITableView

c++ - 在没有 'for' 循环的情况下找到 vector<vector<int>> 中的最大值

c++ - 超越堆栈采样 : C++ Profilers