Я хочу избежать создания копий вектора, который достаточно велик. Вот довольно четкий пример того, в чем проблема:
struct MyStruct {
std::vector<int> v;
int x;
}
class MyClass {
MyStruct lastStruct_;
public:
MyStruct create_struct() {
MyStruct s = { std::vector<int>(1000000, 1), 1234 };
lastStruct_ = s; // THIS IS A FULL COPY, PROBLEM
return s; // THIS SHOULD NOT BE A COPY AS PER C++11 AND UP
}
MyStruct getLastStruct() {
return lastStruct_;
}
}
void main()
{
MyClass c;
for (int i = 0; i < A_LOT; i++)
{
writeToDisk(c.create_struct());
}
//MEANWHILE IN OTHER THREAD:
// while(true)
// updateUI(c.getLastStruct());
}
Как мне избежать копирования здесь? Я пытаюсь решить эту проблему с помощью общих указателей, но я все еще новичок в этом. Будет ли что-то вроде этой работы (синтаксис может быть выключен)?
struct MyStruct {
std::vector<int> v;
int x;
}
class MyClass {
std::shared_ptr<MyStruct> lastStruct_;
public:
MyStruct create_struct() {
auto s = std::maked_shared<MyStruct>({ std::vector<int>(1000000, 1), 1234 });
lastStruct_ = s;
return *s;
}
std::shared_prt<MyStruct> getLastStruct() {
return lastStruct_;
}
}
void main()
{
MyClass c;
for (int i = 0; i < A_LOT; i++)
{
writeToDisk(c.create_struct());
}
//MEANWHILE IN OTHER THREAD:
// while(true)
// updateUI(c.getLastStruct()->data());
}