说我已经从班级A
创建了对象A'
。对象A
对它的构造函数提出了很多论据。
在类B
的对象B'
中,我想存储A'
的实例。但是类B'
在它的构造函数中也需要相当多的参数。我没有将A'
的所有参数传递给构造函数,而是首先创建A'
的实例,然后将其引用发送给{{1}的构造函数。而不是创造更大的争论。
在c ++中,它看起来像这样:
B'
这是好的代码练习吗?另外我想知道我最好如何通过构造函数分配指针?我到目前为止做过类似的事情
class A'
{
A'(arg1, arg2,...argn);
}A(arg1, arg2,...argn);
class B'
{
public:
B'(arg1, arg2,...argn, A'* aptr)
A'* myA;
}B(arg1, arg2,... argn, &A);
确实有效,但它是否整洁,良好的做法等?
答案 0 :(得分:2)
根据经验,如果可以避免,请不要将指针存储在对象中。如果可能,只需存储参考。它使对象不可复制,这会阻止您在其依赖性被破坏后继续使用第二个类。
另外,初始化成员变量(包括指针)的正确表示法就是这个......
myConstructor (object __foo) : foo(__foo) { }
这是一个非常基本的例子,它使用引用将另一个类存储为成员。
// Let's suppose we're implementing an XML file handling class.
// We decide to put the file handling operations in one class and
// let the XML stuff wrap around that file class.
class File {
// Implement file opening/writing here
};
class XMLFile {
// Implement XML opening/writing nonsense here.
File & m_file;
XMLFile (File & f);
};
XMLFile::XMLFile (File & f) : m_file(f) {
}
答案 1 :(得分:0)
小心地将指针传递给构造函数,然后将它们分配给字段。即使你很小心,也很难确保在指针仍处于使用状态时指针未被释放。此外,在释放内存时可能很难解决问题。
考虑让对象保留它自己的指针所指向的数据副本或使用shared_ptr。