没有任何理由使用非标bzero()和bcopy()替代memset(),并memcpy()在Linux环境?我听说很多人说他们对Linux编译器更好,但是没有看到任何优于标准功能的优势.
它们是否比标准的更优化,或者它们是否具有任何行为特异性?
我已经看到一些智能指针operator=以两种方式实现:
A)将原始指针分配给另一个原始指针的一个:
SmartPointer& operator=(const SmartPointer& rhs)
{
delete m_ptr;
m_ptr = rhs.m_ptr;
return *this;
}
Run Code Online (Sandbox Code Playgroud)
B)在赋值后使右手侧指针无效的一个:
SmartPointer& operator=(SmartPointer& rhs)
{
delete m_ptr;
m_ptr = rhs.m_ptr;
rhs.m_ptr = nullptr
return *this;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是更多建议使用哪一个?我对B)的问题是,如果有人想进一步操作第二个智能指针(参见下面的代码),程序将崩溃(如果没有检查空指针)或什么都不做.这似乎不太好:)
SmartPointer<MyClass> p1(new MyClass());
SmartPointer<MyClass> p2(new MyClass());
p1 = p2;
p2->someMethod(); // <----- BOOM!
Run Code Online (Sandbox Code Playgroud) 今天,我看到过如下代码:
void Foo()
{
MyMsgStruct myMsg;
/* omission for simplicity */
/* send to update thread */
PostThreadMessage(myThreadId, myMessage, (WPARAM)myMsg, NULL);
}
Run Code Online (Sandbox Code Playgroud)
当Foo()从同一个线程调用时myThreadId,即从应该是目标线程的同一个线程调用时会发生什么?是性能问题还是只是糟糕的编写代码或两者兼而有之?
我相信它可能会影响性能,因为我相信它会将消息排队到线程的队列而不是仅仅做它应该做的事情,因此减慢程序的速度.
线程安全不是我对此问题的关注.
我对以下程序有疑问,我无法理解以下程序的输出:
#include<stdio.h>
#include<conio.h>
main()
{
char c='1';
clrscr();
printf("%d",&c);
getch();
}
Run Code Online (Sandbox Code Playgroud)
在我的编译器中,它打印"-11",我正在使用Turbo C++.我知道,如果我使用" c"而不是" &c"它将打印49因为它是一个ASCII数字'1'.但它为什么打印 - 11当我使用" &c"时.