在 C++ 中,可以在不破坏原始对象的情况下按值传递临时对象吗?
Can a temporary object be passed by value without destroying the original in C++
在下面的代码中,当结构 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;
}
您正在寻找 emplace_back
:
sVector.emplace_back(&i);
这将就地构建 S
,任何地方都没有临时文件。
但是请注意,您不能保证附加操作不会触发调整大小 - 调整大小将涉及复制和销毁一堆 S
s。
在下面的代码中,当结构 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;
}
您正在寻找 emplace_back
:
sVector.emplace_back(&i);
这将就地构建 S
,任何地方都没有临时文件。
但是请注意,您不能保证附加操作不会触发调整大小 - 调整大小将涉及复制和销毁一堆 S
s。