MST

星途 面试题库

面试题:C++ 类成员初始化效率优化之中等题

假设有一个C++类`MyClass`,包含一个`std::vector<int>`类型的成员变量`vec`,请分别使用成员初始化列表和在构造函数体内赋值这两种方式对`vec`进行初始化,并分析这两种方式在效率上有何不同。
16.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

使用成员初始化列表初始化

#include <vector>

class MyClass {
private:
    std::vector<int> vec;
public:
    MyClass() : vec({1, 2, 3}) {}
};

在构造函数体内赋值初始化

#include <vector>

class MyClass {
private:
    std::vector<int> vec;
public:
    MyClass() {
        vec = {1, 2, 3};
    }
};

效率分析

  1. 成员初始化列表
    • 效率较高。在对象创建时,vec 直接使用初始化列表中的值进行构造。std::vector 只需一次分配内存并填充数据,避免了额外的默认构造和赋值操作。
  2. 构造函数体内赋值
    • 效率相对较低。首先 vec 会被默认构造,创建一个空的 std::vector,然后再通过赋值操作 (vec = {1, 2, 3};) 重新分配内存并填充数据,这涉及到一次默认构造和一次赋值操作,相比成员初始化列表多了一些开销。