C++ 实例化方法中的对象与创建类成员
实例化方法中所需的对象与使对象成为类成员相比,有哪些原因 例如,在下面的示例代码中,我有一个类ClassA,我想从另一个类中使用它,比如USer1,它将指向ClassA对象的指针作为成员变量并在其构造函数中实例化;另一方面,User2在使用它之前在方法中实例化ClassA对象。以这种方式与以另一种方式相比,有哪些原因C++ 实例化方法中的对象与创建类成员,c++,C++,实例化方法中所需的对象与使对象成为类成员相比,有哪些原因 例如,在下面的示例代码中,我有一个类ClassA,我想从另一个类中使用它,比如USer1,它将指向ClassA对象的指针作为成员变量并在其构造函数中实例化;另一方面,User2在使用它之前在方法中实例化ClassA对象。以这种方式与以另一种方式相比,有哪些原因 class ClassA { public: void doStuff(void){ } }; // // this class has ClassA as a
class ClassA
{
public:
void doStuff(void){ }
};
//
// this class has ClassA as a member
//
class User1
{
public:
User1()
{
classA = new ClassA();
}
~User1()
{
delete classA;
}
void use(void)
{
classA->doStuff();
}
private:
ClassA *classA;
};
//
// this class uses ClassA only in a method
//
class User2
{
public:
void use(void)
{
ClassA *classA = new ClassA();
classA->doStuff();
delete classA;
}
};
int main(void)
{
User1 user1;
user1.use();
User2 user2;
user2.use();
return 0;
}
使其成为班级成员的好处是:
- 您不必每次都分配实例,这取决于类,可能会非常慢
- 成员可以存储状态(尽管有些人会说这是个坏主意)
- 更少的代码
- 在堆栈上实例化类非常有用,因为它不会导致整体内存碎片李>
- 将其创建为值成员可能会导致问题,因为它可能会增加对象的总体大小,因此当您进入碎片场景时,对象可能太大而无法创建李>
- 创建对象并存储指向该对象的指针可能会增加内存碎片
- 在堆上分配和在使用结束时删除可能会增加内存碎片,如果在使用后分配了其他内容
void use(void)
{
ClassA classA;
classA.doStuff();
} //classA will be destructed at end of scope
使其成为班级成员的好处是:
- 您不必每次都分配实例,这取决于类,可能会非常慢
- 成员可以存储状态(尽管有些人会说这是个坏主意)
- 更少的代码
- 实例化
void use(void) { ClassA classA; classA.doStuff(); } //classA will be destructed at end of scope
class User1 { public: void use(void) { classA.doStuff(); } private: ClassA classA; };
class User2 { public: void use(void) { ClassA classA; classA.doStuff(); } };