如果 C++ 类成员函数需要一个指向对象的指针作为参数,那么通过引用传递是否被认为是不好的做法?
例如,下面的代码可以工作,但是如果没有按引用传递,它就会变成危险代码,并且会在运行时导致灾难性错误。
class ClassA
{
public:
void SetPointer(const ClassB& classb) // Remove 1 ampersand and serious errors will occur
{
if(ptr_to_classb == nullptr) // Initialized to nullptr in constructor
ptr_to_classb = &classb;
else
throw(...); // Throw some error
}
private:
ClassB* ptr_to_classb;
}
考虑如果按值传递,并且制作了参数的副本,那么在以后取消引用时这将是灾难性的。
替代方案是这样的:
class ClassA
{
public:
void SetPointer(const ClassB* const classb)
{
if(ptr_to_classb == nullptr) // Initialized to nullptr in constructor
ptr_to_classb = (ClassB*)(classb);
else
throw(...); // Throw some error
}
private:
ClassB* ptr_to_classb;
}
我喜欢一致性,默认为第一种类型,但是我怀疑第二种形式被认为是更好的做法。是这样吗?