返回指向类成员的指针 - 我应该避免它
Returning pointer to class member - should I avoid it?
我没有编程经验,所以我想问问你的意见。例如,我有 3 个类:
class A
{
public:
A(int size);
int getSize();
private:
int size_;
};
class B
{
public:
A* getChild(int childNumber);
int getNChildren()
{
return children.size();
}
private:
std::vector<A> children;
};
class C
{
public:
void sumSize()
{
int sum = 0;
for(int i = 0; i < member.getNChildren(); i++)
{
sum += member.getChild(i)->getSize(); // here I wonder if this is good style
}
}
private:
B member;
};
这是一种不好的做法吗?我知道我可以在类 B 中使用方法 sumSize() 并返回此总和,但我可以用这种方式这样做,或者在更大的程序中会有并发症吗?所以这是我的主要问题:
- 我是否应该避免返回指向成员的指针:
A* getChild(int childNumber);
- 所有涉及儿童的东西都应该是计算的 在B类?
我相信
您正在描述一种容器设计模式,该模式备受尊重且有用。 作为设计者,如果您决定成员函数是公共的,那么您打算让"外部世界"访问它们,而该决定取决于您要完成的内容。
也许你不希望外界修改这个成员,所以也许const A* getChild(int childNumber)
可能是你想要的。
设计时考虑"常量"是一个好习惯,示例中的所有三个公共成员函数都可以是常量(例如int getSize() const
),而不会影响您演示的功能。
这里的一个错误是使用operator
作为私人数据成员的名称。 operator
是 C++ 中的保留关键字。
相关文章:
- OpenCV 我应该使用智能指针来防止内存泄漏吗?
- 我应该如何在工厂类中存储弱指针列表?
- 将指向矢量的指针推回,然后修改其值会影响推送的值.我应该怎么做?
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 我应该在 v8::外部手动删除指针吗?
- 我应该对通用二叉搜索树中的根使用哪种类型的指针
- 我应该在课堂上使用指针来收集
- 我应该删除来自其他函数或类方法的指针吗?
- 我应该如何在Qt中存储指针
- 我应该在使用后删除 QObject 指针吗?
- 如果存在任何循环关系,我应该假设弱指针使用吗?
- 当类同时包装 STL 容器和指针时,我应该销毁类析构函数中的 STL 容器吗?
- 在这种情况下,我应该使用智能指针吗?
- 我应该如何在OpenCV中传递指向成员函数的指针来设置MouseCallback?
- 如果我需要多态性,我应该使用原始指针而不是unique_ptr
- 我应该一直在C++11中使用智能指针吗
- 删除从另一个指针分配的指针,我应该再次删除另一个指针吗?
- 在C++对象中:我应该使用父类强制转换指针,还是应该使用实际类本身进行强制转换
- 我认为应该允许我“删除”指针,但抛出了一个错误“使用中的块”
- 我应该如何保留指向std::unique_ptr的指针