正确使用具有用户定义类型的 std::vector.push_back()
proper use of std::vector.push_back() with a user defined type
我目前的 vector.push_back() 方法遇到了分割错误(我认为)。
下面是一些示例代码:
所以我有我的班级僵尸
class Zombie
{
public:
Zombie();
~Zombie();
SDL_Surface* image;
SDL_Rect box;
bool dead;
protected:
private:
// gets random coordinates around the screen
SDL_Rect get_zombie_rect();
};
构造函数为:
Zombie::Zombie()
:
dead(false),
image(load_image("Player.png")),
box(get_zombie_rect())
{
}
Zombie 有一个处理程序类来管理向量,使用一个名为 create_new_zombie() 的函数。(这是问题所在)
void Zombie_Manager::create_new_zombie()
{
Zombie newZombie;
zombies.push_back(newZombie);
}
这是向向量添加元素的正确方法吗?
我能够使用指针获得工作版本,但必须有一种更简单、更正确的方法来实现这一目标,对吧?
如果 std::vector.push_back() 浅层复制其新元素,为什么会出现 seg 错误?我假设错了吗?
您需要实现复制构造函数和赋值运算符。
zombies.push_back(newZombie);
在向量中推送newZombie
的副本。当方法进入时,原始newZombie
将被销毁。我敢打赌,在你称~Zombie()
delete image;
.
由于您没有正确的复制构造函数和赋值运算符,因此所有副本都将无效,因为它们将包含悬空指针。
始终遵循三法则 - 如果需要实现析构函数,则还需要实现 c-ctor 和赋值运算符。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++从 std::vector<std::function<中删除 std::function>>
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 将 std::vector<std::unique_ptr<T>> 移动到 std::vector<std::shared_ptr<T>>
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 将 std::vector<std::string> 转换为 const char* const*
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g