연산자 오버로딩과 삭제에 몇 가지 제한을 두는 것이 가능합니까? 오버로드 된 새 파일이 다른 파일에 내 테스트 프로그램에 연결되어 있습니다. 시나리오는 다음과 같습니다 if(condition is satisfied)
call overloaded new
else
call the actual new defined in new.h
std::vectors 및 std::maps을 std::shared_ptrs으로 만들려고하지만 데이터를 잃는 습관이있는 것 같습니다. 즉, std::shared_ptrs을 입력하면 그 중 일부는 해당 데이터를 삭제합니다. 특히 std::vector에 푸시 될 첫 번째 std::shared_ptr이 삭제됩니다. 원래 std::shared_ptr이 범위를 벗어
int 어레이를 가리키는 포인터 배열이 있습니다. 나는 하드 코딩 된 int 배열을 만들었고 (아래의 '배열'확인) 포인터 배열 (아래의 'bar'체크)에 삽입하고 싶습니다. 포인터의 배열입니다. 그 int 배열을 가리 킵니다. 잘 컴파일됩니다. 경고가 없습니다. 잘 돌아갑니다. 그리고 괜찮아요. 최소한, 나는 현재 소멸자에서 주석 처리 된 주석문을 소개합
&을 컴파일하고 코드를 붙여 넣었습니다. 놀랍게도 오류없이 작동했습니다. (g ++/linux) 삭제 된 개체는 어떻게 여전히 일부 구성원을 사용할 수 있습니까? 정상적인 행동입니까? #include <iostream>
using namespace std;
class chair {
public:
int height;
int
얕은 복사 된 개체 대 원래 개체에서 이중 (삭제) 오류를 제거하려면 어떻게해야합니까? 간단한 예 : 오브젝트를 통과하는이만큼 순진 뭔가 사소한 일이며, 때문에 class INT
{
int *p; //dynamic.
//define here fancy constructors etc.
set(int i){ p=new int; p
나는 다른 클래스 차량에 포인터의 배열을 가지는 클래스가있는 경우 : 내가 수동으로 반복 않습니다 class List {
public:
//stuff goes here
private:
Vehicle ** vehicles;
}
지금 클래스 List의 소멸자를 작성하는 경우 배열 (배열에 얼마나 많은 항목이 있는지
편집 : 삭제 연산자를 추가해도 Valgrind 출력이 변경되지 않는 이유를 설명 할 수 있습니까? 제게 C++ 서적을 읽어달라고 부탁하지 마십시오. 저는 한 쌍을 살펴보고 대답을 찾지 못했습니다. 저는 C++을 처음 접했습니다. 자바 세계에서 왔기 때문에 새로운 연산자와 삭제 연산자를 사용하는 방법을 이해하는 데 어려움이 있습니다. 클래스 (MyClass
은 다음을 고려 코드 : typedef SomeType type_t[2];
SomeType * arr1 = new type_t; //new or new[] ???
type_t * arr2 = new type_t[3]; //new or new[] ???
는 new 버전은 1 일 및 2 차 케이스 (new 또는 new[])에서 호출되는 표준에 따라 어떻
다음 문장에서 나는 동적으로 생성 된 메모리에 대한 포인터를 삭제하려고합니다. 하지만 곧 나는 액세스 위반 예외가 말하는 발생의 지시에 도착 같이가 0xc0000005 : SERVER.EXE에서 0x0094c91f에서 처리되지 않은 예외 액세스 위치를 0x00000000을 읽는 위반. 하지만 디버거로 단계별 때 거기에 유효한 데이터와 유효 주소를 포함 ..
: class Owner {
public:
enum Type {TypeB, TypeC};
void swap(Type type);
private:
A* m_a;
};
class A {
};
class B : public A {
void foo();
Owner* m_owner;
};
class C