代码是gpt直接生成的,感觉没毛病
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
#include <QCoreApplication> #include <QDebug> #include <QSharedPointer> #include <chrono> class MyClass { public: MyClass(int value) : value_(value) {} int getValue() const { return value_; } private: int value_; }; void testSharedPointer() { auto startTime = std::chrono::high_resolution_clock::now(); for (int i = 0; i < 30000000; ++i) { QSharedPointer<MyClass> ptr(new MyClass(i)); // 多次参数传递 func1(ptr); } auto endTime = std::chrono::high_resolution_clock::now(); auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count(); qDebug() << "QSharedPointer elapsed time:" << elapsedTime << "ms"; } void func1(QSharedPointer<MyClass> ptr) { // 参数传递 func2(ptr); } void func2(QSharedPointer<MyClass> ptr) { // 参数传递 func3(ptr); } void func3(QSharedPointer<MyClass> ptr) { int value = ptr->getValue(); Q_UNUSED(value); } void testBarePointer() { auto startTime = std::chrono::high_resolution_clock::now(); for (int i = 0; i < 30000000; ++i) { MyClass* ptr = new MyClass(i); // 多次参数传递 func4(ptr); delete ptr; } auto endTime = std::chrono::high_resolution_clock::now(); auto elapsedTime = std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count(); qDebug() << "Bare pointer elapsed time:" << elapsedTime << "ms"; } void func4(MyClass* ptr) { // 参数传递 func5(ptr); } void func5(MyClass* ptr) { // 参数传递 func6(ptr); } void func6(MyClass* ptr) { int value = ptr->getValue(); Q_UNUSED(value); } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); testSharedPointer(); testBarePointer(); return a.exec(); } |
在上述示例代码中,我们定义了一个名为 MyClass 的类,它包含一个整型成员变量。然后,我们分别实现了两个函数:testSharedPointer 和 testBarePointer,用于测试 QSharedPointer 指针和裸指针……