我创建了一个类,如果一个成员为空,我不想创建该对象.这些是代码行:
#include "verification/CVerifObj.hpp"
VerifObj::VerifObj(const fs::path& imgNameIn)
{
m_image = cv::imread(imgNameIn.string());
AnalyseCSV csv;
m_plateContour = csv.getPlateRegion(imgNameIn); // search for the csv file and load the values
if (m_plateContour.empty()) // throw exception if empty csv
{
throw EmptyContourException(imgNameIn.string());
}
m_imageName = imgNameIn.string();
}
VerifObj::~VerifObj()
{
// are these enough for destructor?
m_image.release();
m_plateContour.clear();
}
Run Code Online (Sandbox Code Playgroud)
这样可以,还是我会做更多的事情?如果抛出异常,我怎么能确定没有创建对象?
我有以下几行代码来确保它:
for(fs::directory_iterator iter(folderIn); iter != end; ++iter)
{
if(!fs::is_regular_file(iter->status()))
{
continue;
}
std::string extension = iter->path().extension().string();
if(targetExtensions.find(extension) == targetExtensions.end())
{
continue;
}
try
{
VerifObj verifObj(iter->path());
verifObjVecRet.push_back(verifObj); …Run Code Online (Sandbox Code Playgroud) 我用C++编写了一个带有OpenCV和boost的应用程序,它运行良好且正确,但在退出之前崩溃(如果我一步一步调试,它return 0;在main结束时崩溃)说:
在kdevelop中:
*** Error in `/home/xxx/git_repos/my_proj/build/my_proj': free(): invalid pointer: 0x00000000008939c0 ***
*** Crashed with return code: 0 ***
Run Code Online (Sandbox Code Playgroud)在命令行中:
*** Error in `./my_proj': free(): invalid pointer: 0x00000000008939c0 ***
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)如果我使用gdb:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
*** Error in `/home/xxx/git_repos/my_proj/build/plate_info_extractor': free(): invalid pointer: 0x00000000008939c0 ***
Program received signal SIGABRT, Aborted.
0x00007ffff5b83cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
Run Code Online (Sandbox Code Playgroud)有什么帮助吗?我无法弄清楚出了什么问题.
我已经评论了一些代码部分,似乎问题出现在我用来记录错误/信息的代码中......所以:
#include "CLogger.hpp"
static void help(const std::string& …Run Code Online (Sandbox Code Playgroud) 我有一个代表掩码的数字,我想获得负面具(0110,即6).我想按位做但不是它似乎也否定了符号位,我得到了一个不需要的值...
size_t msk = 9; // that is 1001, or 000...01001 on more bits
size_t nMsk = ~msk; // this I want to be 6, that is 0110, but bitwise not
// is negating all the bits, so I get 111...10110
Run Code Online (Sandbox Code Playgroud)
有没有快速的方法(没有循环)?
编辑 更多信息:
我在其中一个答案的一些评论中添加了一些更好的案例:在我的情况下,16是100000000而~16不是111011111111,而是000011111111
我已经从另一个相邻分支而不是主分支创建了一个相邻分支。我已添加更改并推送。现在我看到它就像
* master commit update readme (this is how I have noticed it)
| * adj_br_2 commit blahblah
| * adj_br_1 commit blah
|/
* master commit blblbl
Run Code Online (Sandbox Code Playgroud)
现在我想从 master 创建第二个分支而不是从第一个分支。
* master commit update readme (this is how I have noticed it)
| * adj_br_2 commit blahblah
|/
| * adj_br_1 commit blah
|/
* master commit blblbl
Run Code Online (Sandbox Code Playgroud)
有没有办法在不清除和重新创建分支的情况下做到这一点?事实上我需要一种快速的方法来修复它。有什么建议么?