我有一个类(A),用于不同的线程。只有这个类使用另一个类(B)。现在我继承或为A类中的B类对象分配内存。 但是我认为如果我将类B的对象作为参数传递给A的构造函数会更好。在这种情况下,不需要在A类中不断创建或继承B类。在我看来它会是快点。
那么在速度和性能方面会更好吗?
class B {
public: int i;
B() {
i = 123;
}
~B() {}
int get() const { return i; }
}
//first solutions
class A:public B {
public: int j;
A() {}
~A() {}
int somethingMethod(int n) {
j = get() * n;
return j;
}
}
A * a1 = new A(); //for example
cout << a1->somethingMethod(1) << endl;
cout << a1->somethingMethod(14) << endl;
A * a2 = new A();
cout << a1->somethingMethod(45) << endl;
A * a3 = new A();
cout << a1->somethingMethod(12) << endl;
cout << a1->somethingMethod(24) << endl;
cout << a1->somethingMethod(41) << endl;
A * a4 = new A(); //etc.
cout << a1->somethingMethod(41) << endl;
delete a1, a2, a3, a4;
//second solution
class A: {
public: int j;
B * b;
A(B * _b):b(_b) {}
~A() {}
int somethingMethod(int n) {
j = b->get() * n;
return j;
}
}
B * b = new B();
A * a1 = new A(b); //for example
cout << a1->somethingMethod(1) << endl;
cout << a1->somethingMethod(14) << endl;
A * a2 = new A(b);
cout << a1->somethingMethod(45) << endl;
A * a3 = new A(b);
cout << a1->somethingMethod(12) << endl;
cout << a1->somethingMethod(24) << endl;
cout << a1->somethingMethod(41) << endl;
A * a4 = new A(b); //etc.
cout << a1->somethingMethod(41) << endl;
delete b, a1, a2, a3, a4;
答案 0 :(得分:0)
您需要考虑三件事 -
您说A类是由多个线程访问的。您的示例代码看起来不错,但如果只是一些伪代码,您嘲笑问问题,那么您需要确保您的类是线程安全的。在您的情况下,您只读取值,但如果从多个线程同时发生读/写,请确保使用一些线程同步对象来同步它们。
现在谈论速度和性能。您的示例类似乎没有做太多。我没有看到写课的必要性。内联函数也可能是最好的(考虑到这不是一些模拟代码)。即使您使用继承,只要您不使用虚拟函数,在vtable中查找额外的开销并且如果您真的关心那么多细节那么请使用指针,那么它就不应该伤害您。
< / LI>如果B类只是一个实现细节,那么我不会将它作为参数传递给构造函数。