Eng*_*999 4 c++ pointers class pass-by-reference pass-by-pointer
我被告知要避免在C++中使用指针.似乎我无法避免它们,但是在我试图编写的代码中,或者我可能错过了其他很棒的C++特性.
我希望创建一个类(class1),它包含另一个类(class2)作为数据成员.然后我希望class2知道class1并能够与它通信.
我可以在class2中引用class1作为成员,但这意味着我需要在class2的构造函数中提供对class1的引用作为参数,并使用我不想要的初始化列表.我试图这样做而不需要构造函数来做.
我希望class2有一个名为Initialise的成员函数,它可以接受对class1的引用,但是如果不使用指针,这似乎是不可能的.人们会在这里推荐什么?提前致谢.
代码完全简化,只是为了获得主要想法:
class class1
{
public:
InitialiseClass2()
{
c2.Initialise(this);
}
private:
class2 c2;
};
class class2
{
public:
Initialise(class1* c1)
{
this->c1 = c1;
}
private:
class1* c1;
};
Run Code Online (Sandbox Code Playgroud)
没有使用指针,这似乎是不可能的
那是不对的.实际上,要处理对其他对象的引用,请引用构造函数:
class class2
{
public:
class2(class1& c1)
: c1(c1)
{}
private:
class1& c1;
};
Run Code Online (Sandbox Code Playgroud)
这里的关键是初始化,而不是分配参考.这是否可能取决于你是否可以摆脱你的Initialise功能并适应RAII(请做!).在那之后,这实际上是否是一个好主意取决于您的用例; 如今,通过使用其中一种智能指针类型,你几乎可以肯定地使所有权和生命周期语义更加清晰 - 即使它只是一种std::weak_ptr.
无论如何,说得更一般.
指针"总是"不好吗?不,当然不.我几乎很想说自己管理动态记忆"总是"不好,但我不会做出概括.
你应该避开它们吗?是.
不同之处在于,后者是引导您远离手动内存管理的指导原则,前者是一种未经尝试的禁令.
不,在 C++ 中使用指针一点也不坏,而且我一遍又一遍地看到这种反建议。不好的是自己管理指针,除非您正在创建一个管理指针的低级实体。
我将再次做出非常明确的区分。使用指针是很好的。很少有真正的 C++ 程序可以不使用指针。管理指针是不好的,除非您正在使用指针管理器。
| 归档时间: |
|
| 查看次数: |
1028 次 |
| 最近记录: |