在构造函数中指定指针,什么是好的做法

时间:2014-03-28 13:44:31

标签: c++ pointers constructor

说我已经从班级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);

确实有效,但它是否整洁,良好的做法等?

2 个答案:

答案 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。