如果 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;
}
我喜欢一致性,默认为第一种,但我怀疑第二种形式被认为是更好的做法。是这样吗?
最佳答案
好吧,这两种方法都是正确且很好的,但在您的情况下,使用指针可能会更好,因为与指针不同,引用变量只能在初始化时赋值。使用相同的指针,您稍后可以传递不同的类对象。
关于C++ 成员函数需要指针,通过引用传递的坏习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228074/