我感兴趣的是这两行代码是否相同:
shared_ptr<int> sp(new int(1)); // double allocation?
shared_ptr<int> sp(make_shared<int>(1)); // just one allocation?
Run Code Online (Sandbox Code Playgroud)
如果这是真的,有人可以解释为什么在第二行只有一个分配?
最近我问了这个问题,但现在我想扩大它.我写了以下课程:
template <class T>
class X{
public:
vector<T> v;
template <class T>
X(T n) {
v.push_back(n);
}
template <class T, class... T2>
X(T n, T2... rest) {
v.push_back(n);
X(rest...);
}
};
Run Code Online (Sandbox Code Playgroud)
使用时创建对象
X<int> obj(1, 2, 3); // obj.v containts only 1
Run Code Online (Sandbox Code Playgroud)
Vector仅包含第一个值,但不包含其他值.我已经检查并看到构造函数被调用了3次,所以我可能正在创建临时对象并用其余参数填充它们的向量.我该如何解决这个问题?
我刚开始用C++学习lambda函数,我不明白为什么lambda只允许捕获自动存储变量?例如:
int x;
int main() {
[&x](int n){x = n;}; // 'x' cannot be captured...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,静态变量根本不需要捕获
static int s = 0;
[](int n){s = n;};
Run Code Online (Sandbox Code Playgroud)
那么,为什么不允许第一个例子而第二个例子呢?
我正在使用C++ Builder XE7并遇到一个奇怪的问题.我需要一个大约1500像素的表格高度.问题是对象检查器不允许我指定大于1096像素的值.如果我设置任何更大的值,它将自动设置为1096 ..任何现有或新的表单上都存在问题.我使用的是Windows 7,屏幕分辨率为1920x1080.
这里发生了什么?
const int a = 0;
const int *pa = &a;
int *p = const_cast<int*>(pa);
*p = 1; // undefined behavior ??
cout << a << *p; // ??
Run Code Online (Sandbox Code Playgroud)
我的编译器输出0和1,但'a'的地址和'p'的值是相同的,所以我很困惑这是怎么回事.
所以,假设我有这个代码:
template <class T1, class T2>
auto sum(T1 a, T2 b) ->decltype(a + b) {
return a + b;
}
template <class T1, class T2, class... T3>
auto sum(T1 a, T2 b, T3... tail) ->decltype(a + sum(b, tail...)) {
return a + sum(b, tail...);
}
Run Code Online (Sandbox Code Playgroud)
我想以sum一种传递向量的方式调用函数:
vector<double> numbers = { 1, 2, 6, 5 };
Run Code Online (Sandbox Code Playgroud)
应该用作函数的参数列表sum.我怎样才能做到这一点?sum在这种情况下,调用函数应返回14.
创建shared_ptr时,它的管理器对象使用强弱引用计数器.我明白通过使用强引用计数器shared_ptr知道何时解除分配托管对象但我不明白为什么它使用弱引用计数器.
因此,我的Delphi组件功能齐全,可用,除了一些细节尚未涵盖.我想要的是创建一个设置(Inno设置),它会自动将我的组件安装到用户的Delphi/C++ Builder IDE中.我认为我必须使用delphi命令行编译器,但如何?
谢谢.
我知道如何在C++ Builder/Delphi中创建Web服务.但是,我不知道如何在我的网站上发布它.我正在使用网络托管服务,而不是我自己的个人网络服务器.例如,

我通常使用第一个选项"Stand-alone VCL application".这个可以在网站上发布吗?这些类型之间有什么区别?
我理解这unique_ptr是某个对象的单个所有者,当它超出范围时,它会释放该对象.我不明白的是以下情况:
unique_ptr<int> p(new int(1));
p = unique_ptr<int>(new int(2));
Run Code Online (Sandbox Code Playgroud)
第一个对象new int(1)如果p被重定向到另一个内存位置会发生什么new int(2)(因为它p只能拥有其中一个)?
c++ ×7
c++11 ×6
delphi ×3
vcl ×3
c++builder ×2
c++14 ×1
components ×1
const-cast ×1
lambda ×1
make-shared ×1
unique-ptr ×1
web-hosting ×1
web-services ×1