我正在开发一个类,除其他外,该类将创建一个内存块并对该内存执行一些处理。用户将执行如下操作:
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
执行写作和阅读。
非面向对象的方法也可以:替换 createData
和 processData
使用免费功能,返回 std::unque_ptr<float[]>
(或者更好的是,使用 std::vector
)数据,并摆脱 MyClass
完全。
关于c++ - 我应该通过传递冗余参数来避免隐式行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35458482/