我得到向量大小的值为1
和0
,我知道有两个不同的实例,但是我希望它们在两个实例之间是通用的
我不确定什么是正确的方法是否需要一些见解来满足我的情况。
#include <iostream>
#include <memory>
#include <vector>
class Fruit
{
public:
Fruit(std::vector<int>& number);
Fruit();
int numOfApple();
private:
std::vector<int> number;
};
Fruit::Fruit() {}
class Apple
{
public:
Apple();
Apple(Fruit &fruit);
int appleCount();
private:
Fruit fruit;
};
Apple::Apple() {}
Apple::Apple(Fruit &fruit):fruit(fruit) {}
int Fruit::numOfApple()
{
std::cout<<"vector size is"<<number.size()<<std::endl;
for (auto& fruz : number) {
std::cout<<"do nothing"<<std::endl;
}
return 0;
}
int Apple::appleCount()
{
fruit.numOfApple();
return 0;
}
Fruit::Fruit(std::vector<int>& number):number(number) {}
int main()
{
std::vector<int> fru;
fru.push_back(1);
Fruit fruit1(fru);
Apple apple(fruit1);
fruit1.numOfApple(); // the size of the vector here is 1
// Now try to simulate server code
Fruit fruit2;
fruit2.numOfApple(); // the size of vector in this is 0
return 0;
}
输出
./a.out vector size is1 do nothing vector size is0
答案 0 :(得分:2)
您可以为此使用std::shared_ptr
。只要引用它的任何对象都存在,它就可以存在,并且允许多个对象共享其内容的所有权。
class Fruit
{
Fruit::Fruit()
: number(std::make_shared<std::vector<int>>())
{}
Fruit(std::vector<int>& numberNew)
: number(std::make_shared<std::vector<int>>(numberNew))
{}
std::shared_ptr<std::vector<int>> number;
}
现在,当您复制类时,shared_ptr
的副本将不会复制矢量,而只是引用相同的矢量并为您处理所有生命周期管理。
int Fruit::numOfApple()
{
std::cout << "vector size is" << number->size() << std::endl;
for (auto& fruz : *number) {
std::cout << "do nothing" << std::endl;
}
return 0;
}
除非绝对必要,否则我强烈建议您不要制作static
。这里没有必要,您可以立即寻求适当的解决方案,以防止将来出现增长难题。