可以通过值传递临时对象而不破坏C++中的原始对象

Jam*_*mes 0 c++ move vector

在以下代码中,当结构S被销毁时,指针被重置.我更喜欢结构值的向量而不是指针.有没有办法添加到矢量而不会暂时被破坏?

int* pi = nullptr;

struct S
{
    S(int* i) { pi = i; }
    ~S() { pi = nullptr; }
};

int main(int argc, char* args[])
{
    int i = 5;
    std::vector<S> sVector;
    sVector.push_back(S(&i));
    std::cout << pi << std::endl; // outputs 0 instead of address
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bar*_*rry 5

您正在寻找emplace_back:

sVector.emplace_back(&i);
Run Code Online (Sandbox Code Playgroud)

这将构建一个S就地,没有临时任何地方.

但请注意,您无法保证追加操作不会触发调整大小 - 并且调整大小将涉及复制和销毁一堆Ss.