MST

星途 面试题库

面试题:C++ 类构造函数手动调用的典型场景

在 C++ 中,请列举至少两个需要手动调用类构造函数的特殊情况,并通过代码示例说明如何正确手动调用构造函数。
43.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 定位 new 表达式(placement new):当你想在已分配的内存上构造对象时,会用到定位 new 表达式,此时需要手动调用构造函数。
#include <iostream>
#include <new>

class MyClass {
public:
    MyClass() {
        std::cout << "MyClass constructor called" << std::endl;
    }
    ~MyClass() {
        std::cout << "MyClass destructor called" << std::endl;
    }
};

int main() {
    char buffer[sizeof(MyClass)];
    MyClass* obj = new (buffer) MyClass();
    // 使用完对象后手动调用析构函数
    obj->~MyClass();
    return 0;
}
  1. 在联合(union)中:联合中的成员共享相同的内存位置,当你需要在联合中构造一个有构造函数的类型成员时,需要手动调用构造函数。
#include <iostream>
#include <string>

union MyUnion {
    int num;
    std::string str;
    MyUnion() = default;
    ~MyUnion() {}
};

int main() {
    MyUnion u;
    new (&u.str) std::string("Hello");
    std::cout << u.str << std::endl;
    u.str.~basic_string();
    return 0;
}