换句话说,实现如何跟踪计数?
是否存在一个类似于地图的对象,所有shared_ptr实例都可以访问它们,其键是指针的地址,值是引用的数量?如果我要实现一个shared_ptr,这是我想到的第一个想法.
在这些引用计数智能指针的情况下是否存在内存泄漏的可能性?如果是这样,我该如何避免它们?
c++ memory-leaks memory-management smart-pointers shared-ptr
例如,永远不要像这样定义一个宏:
#define DANGER 60 + 2
Run Code Online (Sandbox Code Playgroud)
当我们执行这样的操作时,这可能是危险的:
int wrong_value = DANGER * 2; // Expecting 124
Run Code Online (Sandbox Code Playgroud)
相反,定义这样,因为你不知道宏的用户如何使用它:
#define HARMLESS (60 + 2)
Run Code Online (Sandbox Code Playgroud)
这个例子很简单,但这几乎解释了我的问题.在编写宏时,您会建议使用哪些指南或最佳实践吗?
谢谢你的时间!
在Java中,如果方法的输入参数无效,我们可以抛出一个IllegalArgumentException(类型为RuntimeException).在C++中,没有检查和未检查异常的概念.标准C++中是否有类似的异常可用于指示运行时异常?或者是否有一种不符合标准的共同风格,但每个人都在实践中遵循这样的情况?
或者,我应该创建自己的自定义异常并抛出它吗?
基本上,我需要将来自多个供应商的产品数据组合到一个数据库中(当然,它比这更复杂),它有几个表需要连接在一起用于大多数OLTP操作.
我将坚持使用默认值并使用自动递增整数作为主键,但是当一个供应商提供他们自己的"ProductiD"字段时,其余的则没有,我将不得不做很多手动映射到另一个表然后加载数据(因为我必须首先将其加载到Products表中,然后将ID拉出并将其与我需要的其他信息一起添加到其他表中).
或者,我可以使用产品的SKU作为主键,因为SKU对于单个产品是唯一的,并且所有供应商都在其数据源中提供SKU.如果我使用SKU作为PK,那么我可以轻松加载数据源,因为所有内容都基于SKU,这就是它在现实世界中的工作方式.但是,SKU是字母数字的,并且可能比基于整数的密钥效率稍低.
我应该关注哪些想法?
我想当一个函数将堆栈中的对象返回给调用函数时,调用函数会获取原始对象的副本,但是一旦堆栈展开就会调用原始对象的析构函数.但是在下面的程序中,析构函数只被调用一次.我预计它会被调用两次.
#include <iostream>
class MyClass
{
public:
~MyClass() { std::cout << "destructor of MyClass" << std::endl; }
};
MyClass getMyClass()
{
MyClass obj = MyClass();
return obj; // dtor call for obj here?
}
int main()
{
MyClass myobj = getMyClass();
return 0; // Another dtor call for myobj.
}
Run Code Online (Sandbox Code Playgroud)
但"MyClass的析构函数"只打印一次.我的假设是错的还是还有其他事情发生在这里?
可能重复:
在将文件保存到Vim之前,我能看到更改吗?
有没有办法在VIM中查看已保存版本的差异和同一文件的编辑版本?
这就是场景:我打开了一个文件,编辑了一些东西,由于一些工作,我离开了计算机.过了一段时间我回来了,我忘了我正在编辑的内容,我想看看最后保存的和同一文件的当前未保存版本之间的区别.有办法吗?
当然,我可以继续撤消直到最后一次更改并开始重做以返回到我未保存的版本.但我希望看到的是差异.
在下面的代码,都amp_swap()和star_swap()似乎是在做同样的事情.那么为什么有人喜欢使用一个而不是另一个呢?哪一个是首选符号,为什么?或者只是品味问题?
#include <iostream>
using namespace std;
void amp_swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
void star_swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 10, b = 20;
cout << "Using amp_swap(): " << endl;
amp_swap(a, b);
cout << "a = " << a << ", b = " << b << endl;
cout …Run Code Online (Sandbox Code Playgroud) 我有一个令人讨厌的错字,浪费了我的时间和我的同事的时间,它是这样的:
for (i = 0; i < blah; i++); // <- I had a semi-colon here, that's the bug!
{
// Some awesome logic here
}
Run Code Online (Sandbox Code Playgroud)
首先,这是非常尴尬的,其次,我不应该重复这一点.我对C比较陌生.在Java中,我想我可以使用FindBugs来捕捉这些错误,我应该用什么工具来代码?皮棉?
可能是使用反向视频来显示差异的东西.
查找和替换范围可以限制如下:
:16,256s/search_term/replacement/gc
Run Code Online (Sandbox Code Playgroud)
我不想用任何其他文本替换我的搜索词,我只是想找到它们.我尝试了以下方法,但没有帮助:
:16,256/search_term # Notice that there is no 's' here
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间!
c++ ×4
c ×2
diff ×2
vim ×2
database ×1
destructor ×1
find ×1
findbugs ×1
java ×1
lint ×1
linux ×1
memory-leaks ×1
merge ×1
pointers ×1
primary-key ×1
reference ×1
scope ×1
shared-ptr ×1
text-editor ×1
unix ×1
validation ×1
vi ×1
vimdiff ×1