我有一个C++代码,我正在使用VC7进行编译,它需要花费大量的时间来构建它.有什么方法可以描述它,并找出为什么需要时间来构建?
我试图通过将引用传递给指针而不是指向指针的指针来回答这里提到的问题,如下所示:
class Parent
{
};
class Child : public Parent
{
};
void RemoveObj(Parent*& pObj)
{
delete pObj;
pObj = NULL;
}
int main()
{
Parent* pPObj = new Parent;
Child* pCObj = new Child;
pPObj = new Parent();
pCObj = new Child();
RemoveObj(pPObj);
RemoveObj(pCObj); // This is line 32
return 1;
}
Run Code Online (Sandbox Code Playgroud)
但是这会在第32行产生以下编译器错误:
错误C2664:'RemoveObj':无法将参数1从'Child*'转换为'Parent*&'
我同意不允许从Child**转换为Parent**.但为什么这种转换也不允许?
在阅读这个问题的答案时,我对向量中对象的默认构造产生了疑问.为了测试它,我编写了以下测试代码:
struct Test
{
int m_n;
Test();
Test(const Test& t);
Test& operator=(const Test& t);
};
Test::Test() : m_n(0)
{
}
Test::Test(const Test& t)
{
m_n = t.m_n;
}
Test& Test::operator =(const Test& t)
{
m_n = t.m_n;
return *this;
}
int main(int argc,char *argv[])
{
std::vector<Test> a(10);
for(int i = 0; i < a.size(); ++i)
{
cout<<a[i].m_n<<"\n";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当然,在创建矢量对象时会调用Test结构默认构造函数.但是我无法理解的是STL如何初始化对象我创建了一个基本数据类型的向量,例如int的向量,因为它有默认的构造函数?即向量中的所有整数如何具有值0?不应该是垃圾吗?
在PortAudio的C++绑定中,有一个MemFunCallBackStream构造函数,可以调用为:
portaudio::MemFunCallbackStream<MyClass> streamRecord(paramsRecord,
*AnInstanceOfMyClass,
&MyClass::MemberFunction);
Run Code Online (Sandbox Code Playgroud)
其中最后一个参数是回调函数.但是,如果不在参数编译器上使用&运算符,则会失败 但据我所知,参数在获取函数指针中使用的函数地址时是可以省略的.这与C回调函数和ptr有什么不同.到了.句法?
我有这个示例代码生成以下警告(带SP1的VS2008编译器):
警告C4146:一元减号运算符应用于无符号类型,结果仍未签名
码:
void f(int n)
{
}
int main()
{
unsigned int n1 = 9;
f(-n1);
}
Run Code Online (Sandbox Code Playgroud)
但是因为函数f正在将它的参数作为一个int不应该编译而没有任何警告吗?
我有以下示例C++代码:
class Factory
{
public:
static Factory& createInstance()
{
static Factory fac;
return fac;
}
private:
Factory()
{
//Does something non-trivial
}
};
Run Code Online (Sandbox Code Playgroud)
让我们假设createInstance两个线程同时调用它.那么生成的对象是否会正确创建?如果第二个线程createInstance在第一个线程位于构造函数中时进入调用会发生什么Factory?
我有一个类,假设是一个基类:
template<int ID>
class BaseClass { ... };
Run Code Online (Sandbox Code Playgroud)
如果两个类尝试使用相同的ID值继承此基类,我怎么能出现编译时错误.那就是 - 这个代码可以起作用:
class A : BaseClass<1> { ... }
class B : BaseClass<2> { ... }
Run Code Online (Sandbox Code Playgroud)
但是这段代码假设会导致错误:
class A : BaseClass<1> { ... }
class B : BaseClass<1> { ... }
Run Code Online (Sandbox Code Playgroud)
怎么能实现这个目标?BOOST_STATIC_ASSERT有帮助吗?
我正在学习PowerShell.在我的实验中,我使用了以下命令:
PS C:\Windows\system32> gci -path C:\windows\ | Where-Object{$_.LastWriteTime -
gt "01-04-2011"} | Format-List -property Fullname | ConvertTo-Html | out-file E:
\PowerShell\Out.html
Run Code Online (Sandbox Code Playgroud)
我期望输出像控制台中显示的输出(如:FullName:C:\ Windows ...).但是当我打开Out.html时,它有一些奇怪的东西,比如:
ClassId2e4f51ef21dd47e pageHeaderEntry pageFooterEntry autosizeInfo shapeInfo groupingEntry
我在这里错过了什么?
我即将对现有的Apache C模块进行一些更改,以修复一些可能的安全漏洞和一般的不良做法.但是,代码的功能必须保持不变(除非修复错误).标准回归测试的东西似乎是有序的.我想知道是否有人知道在代码中运行一些回归单元测试的好方法.我正在考虑使用C-Unit,但是对于Apache APR和状态结构的所有关系,我想知道是否有一种很好的方法来测试它.是否有任何预先构建的框架可以与C-unit一起使用?
谢谢
彼得
我正在使用boost shared_ptr和我自己的内存管理器这样的(剥离示例,我希望它没有错误):
class MemoryManager
{
public:
/** Allocate some memory.*/
inline void* allocate(size_t nbytes)
{
return malloc(nbytes);
}
/** Remove memory agian.*/
inline void deallocate(void* p)
{
free(p);
}
};
MemoryManager globalMM;
// New operators
inline void* operator new(size_t nbytes, ogl2d::MemoryManagerImpl& mm)
{
return globalMM.allocate(nbytes);
}
// Corresponding delete operators
inline void operator delete(void *p, ogl2d::MemoryManagerImpl& mm)
{
globalMM.deallocate(p);
}
/** Class for smart pointers, to ensure
* correct deletion by the memory manger.*/
class Deleter
{
public:
void operator()(void …Run Code Online (Sandbox Code Playgroud) c++ ×8
apache ×1
assert ×1
boost ×1
build ×1
c ×1
callback ×1
compilation ×1
cunit ×1
inheritance ×1
polymorphism ×1
powershell ×1
shared-ptr ×1
stl ×1
templates ×1
testing ×1
unit-testing ×1
unsigned ×1