- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将一些对象添加到同一类型的 vector 中。在标题中:
std::vector<Object_3D> balls_;
我正在尝试使用以下代码将对象推到 vector 的背面:
void S3DApp::InitGameObjects(){
int i;
Object_3D ball_;
for(i = 0; i < ball_count_/2; i++){
ball_.Init(platform_, "stripe.Obj");
ball_.SetScale(abfw::Vector3(0.2, 0.2, 0.2));
ball_.SetTranslation(abfw::Vector3((float)i, 1.0f, (float)i));
balls_.push_back(ball_);
}
}
init 函数从目标文件加载模型:
void Object_3D::Init(abfw::Platform& platform_, const char *filename){
abfw::OBJLoader obj_loader;
obj_loader.Load(filename, platform_, model_);
mesh_instance_.set_mesh(model_.mesh());
transform_.SetIdentity();
mesh_instance_.set_transform(transform_);
position_ = transform_.GetTranslation();
}
由于调用了 object_3d 析构函数,我在第三次运行 for 循环时遇到错误。但我不确定为什么。析构函数是调用 Model::Release() 的地方,我认为它位于调用堆栈的顶部。这是调用堆栈:
s3d_app.exe!abfw::Model::Release() Line 26 C++
s3d_app.exe!Object_3D::~Object_3D() Line 9 C++
s3d_app.exe!Object_3D::`scalar deleting destructor'(unsigned int) C++
s3d_app.exe!std::allocator<Object_3D>::destroy<Object_3D>(Object_3D * _Ptr) Line 624 C++
s3d_app.exe!std::allocator_traits<std::allocator<Object_3D> >::destroy<Object_3D>(std::allocator<Object_3D> & _Al, Object_3D * _Ptr) Line 758 C++
s3d_app.exe!std::_Wrap_alloc<std::allocator<Object_3D> >::destroy<Object_3D>(Object_3D * _Ptr) Line 909 C++
s3d_app.exe!std::_Destroy_range<std::_Wrap_alloc<std::allocator<Object_3D> > >(Object_3D * _First, Object_3D * _Last, std::_Wrap_alloc<std::allocator<Object_3D> > & _Al, std::_Nonscalar_ptr_iterator_tag __formal) Line 89 C++
s3d_app.exe!std::_Destroy_range<std::_Wrap_alloc<std::allocator<Object_3D> > >(Object_3D * _First, Object_3D * _Last, std::_Wrap_alloc<std::allocator<Object_3D> > & _Al) Line 80 C++
s3d_app.exe!std::vector<Object_3D,std::allocator<Object_3D> >::_Destroy(Object_3D * _First, Object_3D * _Last) Line 1480 C++
s3d_app.exe!std::vector<Object_3D,std::allocator<Object_3D> >::_Reallocate(unsigned int _Count) Line 1515 C++
s3d_app.exe!std::vector<Object_3D,std::allocator<Object_3D> >::_Reserve(unsigned int _Count) Line 1532 C++
s3d_app.exe!std::vector<Object_3D,std::allocator<Object_3D> >::push_back(const Object_3D & _Val) Line 1199 C++
我已经尝试将球对象创建为指针并将其添加到指针数组中。我尝试将球创建为对象并将其作为指针添加到数组中。我尝试在 for 循环中创建球对象。
编辑:Object_3D代码
#include <graphics/mesh_instance.h>
#include <graphics/model.h>
#include <assets/png_loader.h>
#include <assets/obj_loader.h>
#include <maths/vector3.h>
class Object_3D{
public:
Object_3D();
~Object_3D();
void Init(abfw::Platform& platform, const char*);
void SetTranslation(abfw::Vector3 transform_);
void SetScale(abfw::Vector3 scale_);
void Move(abfw::Vector3 move_);
abfw::Model& GetModel();
abfw::MeshInstance GetMeshInstance();
abfw::Matrix44 GetTransform();
abfw::Vector3 position_;
private:
abfw::Model model_;
abfw::MeshInstance mesh_instance_;
abfw::Matrix44 transform_;
};
cpp.
#include "Object_3D.h"
Object_3D::Object_3D(){
}
Object_3D::~Object_3D(){
model_.Release();
}
void Object_3D::Init(abfw::Platform& platform_, const char *filename){
abfw::OBJLoader obj_loader;
obj_loader.Load(filename, platform_, model_);
mesh_instance_.set_mesh(model_.mesh());
transform_.SetIdentity();
mesh_instance_.set_transform(transform_);
position_ = transform_.GetTranslation();
}
abfw::Model& Object_3D::GetModel(){
return model_;
}
abfw::MeshInstance Object_3D::GetMeshInstance(){
return mesh_instance_;
}
void Object_3D::SetTranslation(abfw::Vector3 position_vector_){
position_ = position_vector_;
transform_.SetTranslation(position_);
mesh_instance_.set_transform(transform_);
}
void Object_3D::Move(abfw::Vector3 move_){
position_ += move_;
transform_.SetTranslation(position_);
mesh_instance_.set_transform(transform_);
}
void Object_3D::SetScale(abfw::Vector3 scalingVector){
transform_.Scale(scalingVector);
mesh_instance_.set_transform(transform_);
}
abfw::Matrix44 Object_3D::GetTransform(){
return transform_;
}
最佳答案
哪里出了问题
您没有为您的成员初始化值。到构造函数(无论是复制构造函数、默认构造函数、特殊构造函数等)完成时。 所有成员变量都应该在某种意义上被初始化。
你公然违反了 Rule of Three .您需要遵守它,因为您有一个释放资源的析构函数,因此需要一个资源复制(或至少资源共享)复制构造函数和赋值运算符。
为什么您的代码会崩溃
您的 Object_3D
类包含动态 资源(模型就是这样一种资源)。当您将一个新初始化的对象插入您的 vector 时,将生成该对象的一个浅拷贝,因为您没有提供自定义复制/赋值语义。结果,调用了为该类提供的隐式复制构造函数。这意味着一旦推送完成,您现在有两个对象,它们包含对相同数据的动态资源引用。当循环体回收后循环中的本地对象被销毁时,这些资源将被析构函数释放, vector 中的拷贝将留下无效的资源引用。稍后访问这些引用会触发您的崩溃。
如何修复它
使用 Rule of Three 实现您的对象方法,或使用唯一对象实现单一所有权共享资源意识形态。后者可以使用智能指针和相同的 vector 来完成。我不熟悉你正在使用的工具包,所以提供硬编码解决方案是不可能的,但足以说明你的对象必须完全拥有它们的资源(因此是正确的复制/赋值语义必须编码),或者必须开发共享机制以允许多个对象共享对相同资源的引用,最后一个出门的人关灯。
如何实现,我留给你,但至少你知道你的问题。
关于c++ - 在for循环中将对象添加到 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23638549/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!